<<Introduction | Print Layout | Options & Properties>> |
JarClassLoader
looks for a main program inside
a main
directory in the Jar file, and looks for supporting Jar files inside a lib
directory.
Here is what a candidate Jar file would look like set up to run under One-JAR:
jarname.jar | /META-INF | | MANIFEST.MF | | | Main-Class: com.simontuffs.onejar.Boot | | | One-Jar-Main-Class: com.mydomain.mypackage.Main | /main | | main.jar | | | com.mydomain.mypackage.Main.class | /lib | | commons-logging.jar | /com.simontuffs.onejar | | Boot.class | | etc. |That's pretty much all there is to it. Wrap the main class in a file called
main.jar
, put it in a JAR folder
called main
, likewise put supporting Jar files under a folder called lib
,
change the top-level Main-Class
to point to the bootstrap classloader from the One-JAR package,
and then point to main class with a new attributes One-Jar-Main-Class
. Don't worry, there's
an Ant task that will do this, which I'll get to in a moment.
But first try running
an application build with One-JAR here: one-jar-example-0.96.jar.
Download this application and run it using java -jar one-jar-example-0.96.jar
. Then try it with
verbose mode: java -Done-jar.verbose=true -jar one-jar-example-0.96.jar
to get a detailed look at what's
going on in the classloader.
The demo will produce an output similar to this:
$ java -jar one-jar-example-0.96.jar Main: com.simontuffs.onejar.example.main.Main.main() Test: loaded by com.simontuffs.onejar.DetectClassLoader@7a84e4 Test: codesource is jar:file:/C:/work/eclipse-workspaces/workspace-simontuffs/one-jar/dist/... Test: java.class.path=one-jar-example-0.96.jar Util: loaded by com.simontuffs.onejar.DetectClassLoader@7a84e4 Util.sayHello() ... etc.