5/17/2006

What does rt.jar stand for in Java/JDK/JRE?

The most likely answer is, rt stands for RunTime. Some tend to think it stands for RooT, since this jar contains all java build-in classes. But I have yet to find any official Sun documents regarding this acronym.

Whether it stands for RunTime, RooT, or anything else is not important. The question I have is, why would the java creator chose to use such a undescriptive name. Maybe it can make your classpath shorter? But we rarely put rt.jar in system classpath.

Here are 2 reasons I don't like the name rt.jar:

  • While experienced developers take it for granted, java beginners don't know what it is other than it's a jar. So it's one more questions in beginners' mind.
  • The shorter the name, the easier it is to cause naming conflicts, at least visually. While rt.jar will always reside under $JAVA_HOME/jre/lib, it is possible your applications may have another jar also named rt.jar.
I know rt.jar will be with us as long as java is, but just for the sake of discussion, how would you name it differently? Maybe java.jar, or java-core.jar?

PS: What does jar stand for? Jar stands for Java Archive. A jar file usually has file name extension .jar. It contains mainly java class files but any types of files can be included, e.g., XML files, HTML files, properties files, gif/jpg image files, text files, PDF files, and binary files, and so on.

PS: What is the difference between a jar file and a zip file? Basically, a jar file is the same as a zip file, except that the jar file contains a META-INF directory to store metadata or attributes. The most well-known file is META-INF/MANIFEST.MF. You can customize the content of a MANIFEST.MF when creating a jar file, and if you don't, a default one is generated and included. For example:
Manifest-Version: 1.0
Created-By: 1.5.0_06 (Sun Microsystems Inc.)
It's perfectly fine to have other configuration files and directories under META-INF.
Tags: , , ,

6 comments:

Brian Duff said...

I'd actually go further and split it up into several smaller jars, each of which corresponds to some unit of discrete functionality (e.g. swing, collections framework, etc.). The Class-Path manifest mechanism could be used to still have an rt.jar that rolls up all the other jar files for those who don't need that level of granularity on their classpath.

But as you pointed out, we are indeed stuck with the monolithic rt.jar, probably for the lifetime of java.

howto said...

I like the idea of using Class-Path in manifest. This technique is also used by j2ee.jar in JavaEE 5 SDK/Glassfish/SJSAS 9: j2ee.jar delegates everything to javaee.jar.

It can be a good option for advanced users, though people may worry about the integrity and compatibility issues.

If we had this, we wouldn't need to use java.endorsed.dirs to override JDK's (prior to 1.4.2) xml SAX and DOM impls.

Now that Java will be open source (don't know when), maybe it's good time for the community to lobby this.

Ahmed Mostafa said...

Here is what Sun says about it:
http://java.sun.com/javase/6/docs/technotes/tools/windows/jdkfiles.html
rt.jar -- the bootstrap classes (the RunTime classes that comprise the Java platform's core API).

part21 said...

Javacore.jar!!
Are you kidding me? javacore in itself is a diagnostic log, wouldn't we confuse it there?

Anna said...

Great and Useful Article.

Online Java Course

Java Online Training

Java Course Online

J2EE training

online J2EE training

Best Recommended books for Spring framework

Java Interview Questions












Java Training Institutes in Chennai

Java Training in Chennai

J2EE Training in Chennai

java j2ee training institutes in chennai

Karthika Shree said...

It's interesting that many of the bloggers to helped clarify a few things for me as well as giving.Most of ideas can be nice content.The people to give them a good shake to get your point and across the command.
Java Training in Chennai