Executable Jar Files
How to create executable jar?
You can make your Java application runnable via a double-click by packaging
it into a so called executable jar. You do that by specifying the main
class of your application, any extra jar files it may require and so on
in the jar's manifest file.
Then you use the jar utility from the Java SDK to package your classes
and resource files, specifying the m option and the name of your manifest
jar cvfm MyApp.jar MyApp.mf *.class *.gif
This will result in the creation of MyApp.jar. Now, if you type
java -jar MyApp.jar
the Java launcher will read the manifest from MyApp.jar and invoke
the main method from the class MyAppMain. Moreover, if you double-click
that jar file on a system that has JRE installed, the java launcher will
be invoked automatically.
Note: As of J2SE 5.0, jar files are associated with the javaw launcher
on Windows, which does not open a console on startup. If your application
needs a console, write a batch file which would start it using the java
If your application consists of more than one jar file, there is an
open source tool called One-JAR that claims to correctly repackage multiple
jars into one.
The major problem with executable jars is compatibility. The default
JRE may be of an older version than is required by your application or
may not have the necessary Java Optional Packages (previously known as
Standard Extensions) installed. For instance, if your app uses the java.nio
package introduced in Java 2 version 1.4, it will not work on JRE 1.3.x.
Similarly, if it uses JavaMail 1.3, and the default JRE has JavaMail 1.2
or JavaMail is not present at all, the double-clicked jar will not run.
Fortunately, Sun has created a Java application deployment technology
that eliminates this compatibility problem and adds some nice features.
It is part of the Java 2 platform since version 1.4 and is called.
I know that there is a way to create jar files so that when you
double click them they run like a normal program. I also know that to do
this you need to add the Main-class: classname line to the jars manifest
file. However, every time I do create a jar file with this line in its
manifest file, I keep getting the following error.
Failed to load Main-Class manifest attribute from C:\j2sdk1.4.2\bin\risk.jar
Can anyone help me resolve this? More specifically, I'm kinda confused
about using the jar program that comes with the j2sdk. any pointers on
Make sure your manifest file contains the new line (cr-lf) after the
Main-Class entry. Also, the classname must contain the signature of main
function( public static void main(String args) ) and if it has a package
name then you sould need to include the package name.
Here is an example of how would package your application as a jar file:
Create a java application, in this case it is just a Dumy class prints
out the "Hello, World" message:
public class Dummy
public static void main( String args )
System.out.println( "Hello, World" );
Create a manifest file contains the Main-Class attribute. Your manifest
file should look like the following:
NOTE: You need to make sure there is a new line after the Dummy
This step assume that you have compiled your source code into byte-code,
and also your manifiest file name that you have created in step 2 is "mymanifest.mf".
Creating the jar file by using jar command as follows:
jar cmf mymanifest.mf mydummy.jar Dummy.class
NOTE: Assuming your Dummy.class and mymanifest.mf files are in the
To execute it just type as follows:
java -jar mydummy.jar
It should print out the "Hello, World" message.
Take note that you cannot have a .class extension in the Main-Class
1. the value of Main-class entry should contain the class name (including
the package name that it belongs to) without the .class extension.
Suppose you have a package name games.risk under C:\MyGame directory,
and you want to make a jar file with the manifest file, let's say its name
is mymanifest.mf and located in C:\MyGame directory, with bunch of classes
under package name games.risk.
Here is the command you can use to accomplish that:
C:\MyGame>jar cmf mymanifest.mf games.jar games
NOTE: Please make sure that you have an empty line after the Main-Class
entry in your manifest file. Otherwise, it will NOT work!!!!
and also the classname you specify in the Main-Class contain the main
Do you have a Java Problem?
Ask It in The Java
Certification, Programming, JavaBean and Object Oriented Reference Books
Return to : Java
Programming Hints and Tips
All the site contents are Copyright © www.erpgreat.com
and the content authors. All rights reserved.
All product names are trademarks of their respective
The site www.erpgreat.com is not affiliated with or endorsed
by any company listed at this site.
Every effort is made to ensure the content integrity.
Information used on this site is at your own risk.
The content on this site may not be reproduced
or redistributed without the express written permission of
www.erpgreat.com or the content authors.