Monday 20 August 2012

Create Executable Jar File


Pre-Requisites:
  • jdk1.6.0_11 ( works with previous versions of JDK and J2sdk)
 Installed location:
  • jdk1.6.0_11 ->   C:\Program Files\Java\jdk1.6.0_11\
Environment Variables:
Enter Variable name and Variable value which is mentioned below.
Variable name:  JAVA_HOME
Variable value:  C:\Program Files\Java\jdk1.6.0_11

Variable name:  PATH
Variable value:  C:\Program Files\Java\jdk1.6.0_11\bin

Steps to create directory structure
Figure: 1
We want to separate the source from the generated files, so our java sources files will be in src folder. All generated files should be under build folder. In
build folder we have two folders classes and jar. We'll place .class files inside classes folder and .jar files inside jar folder. Refer Figure: 1 (com\javaworkspace\executablejar is ourpackage name).
  1. Using any text editor. Create a java file (ExecutableJar.java) inside the folder E:\01javaworkspace\src\com\javaworkspace\executablejar\

Simple java program to execute windows programs
(You can even use HelloWorld program to create executable jar file)
ExecutableJar.java

  1. /** 
  2.  * ExecutableJar.java 
  3.  */  
  4. package com.javaworkspace.executablejar;  
  5.   
  6. /** 
  7.  * @author www.javaworkspace.com 
  8.  */  
  9. public class ExecutableJar {  
  10.   
  11.     public static void main(String[] args) {  
  12.         Runtime runtime = Runtime.getRuntime();  
  13.         Process process = null;  
  14.   
  15.         try {  
  16.             process = runtime.exec("freecell");  
  17.         } catch (Exception e) {  
  18.             System.out.println("Error executing freecell.");  
  19.         }  
  20.     }  
  21. }  

Note:
Instead of freecell you can give any of the windows programs like notepad, sol (for solitaire game)
  1. Now we try compiling and running the program. Refer Figure: 2
Steps
  1. E:\01javaworkspace>javac -sourcepath src -d build\classes src\com\javaworkspace\executablejar\ExecutableJar.java
  2. E:\01javaworkspace>java -cp build\classes com.javaworkspace.
    executablejar.ExecutableJar
  3. E:\01javaworkspace>echo Main-Class: com.javaworkspace.
    executablejar.ExecutableJar>myManifest
  4. E:\01javaworkspace>jar cfm
    build\jar\Game.jar myManifest -C build\classes .
  5. E:\01javaworkspace>java -jar build\jar\Game.jar
  6. E:\01javaworkspace>jar tf build\jar\Game.jar
  7. META-INF/ META-INF/MANIFEST.MF com/ com/javaworkspace/ com/javaworkspace/executablejar/ com/javaworkspace/executablejar/ExecutableJar.class
  8. E:\01javaworkspace>
 Step: 1
We are just compiling the ExecutableJar.java
-sourcepath <path>    Specify where to find input source files
-d <directory>             Specify where to place generated class files
This step will just create .class file and places inside build\classes folder. You can do the same by simply navigating to
E:\01javaworkspace\src\com\javaworkspace\executablejar>javac ExecutableJar.java
The above command will create .class file inside the same folder. Just cut the .class file and paste that inside
E:\01javaworkspace\build\classes\com\javaworkspace\executablejar\ExecutableJar.class
Step: 2
We are testing weather the program is working or not. If your attempt is success you will get freecell game open.
-cp <class search path of directories and zip/jar files>

Step: 3

We are creating Manifest file with the name myManifest(Refer figure:2). Instead of using echo command you even create a text file with any text editor with
Main-Class: com.javaworkspace.executablejar.ExecutableJar
in first line and save as myManifest.txt
Note:

Do not have blanks around the > - sign in the echo Main-Class instruction because it would falsify it. There should be a empty line after first line.

Figure: 2

Step: 4
E:\01javaworkspace>jar cfm build\jar\Game.jar myManifest -C build\classes . 
Note:

Don't forget to specify the . (period) after classes. This will make all the contents of the folder to be placed inside jar.
-c  create new archive
-f  specify archive file name(here Game.jar is our archive name)
-m  include manifest information from specified manifest file
 -C  change to the specified directory and include the following file
If any file is a directory then it is processed recursively.
The manifest file name and the archive file name needs to be specified
in the same order the 'm' and 'f' flags are specified.

Step: 5
Run the program by double clicking Game.jar or by
E:\01javaworkspace>java -jar build\jar\Game.jar
Step: 6
E:\01javaworkspace>jar tf build\jar\Game.jar
-t  list table of contents for archive
-f  specify archive file name
This will display the content of Game.jar file
Figure: 3

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...