Java程序编辑好了,编译成了class文件,可能会有很多,不便于发布。可以把这些class文件连同他们的资源文件一起打包成一个jar文件。这个文件便于保存和发布。
首先写了个简单的输出文字的程序:(MakeJar.java)
//---MakeJar.java
//---Learn to make a jar file.
//---Output a String "This jar file is running!"
package makejar;
public class MakeJar
{
public static void main(String[] args)
{
System.out.println("This jar file is running!");
}
}
编译MakeJar:
javac MakeJar.java
建立一个文件夹makejar,将得到的MakeJar.class 文件放到里面。
测试一下这个class文件:在root文件夹中,命令: java makejar/MakeJar
就可以运行了。如果直接在makejar文件夹中运行 java MakeJar 就会报错的。
Exception in thread "main" java.lang.NoClassDefFoundError: MakeJar (wrong name:
makejar/MakeJar)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:792)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
2)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)
还有一个用来指示jar文件运行时找到main类的信息文件:(MakeJar.mf)【这个文件最后一行要是一个以回车结尾的行,索性就多打几个回车 】
Main-Class: makejar.MakeJar
文件结构是这样的:
root
|-------makejar
|-------------MakeJar.class
|--------MakeJar.java
|--------MakeJar.mf
【打包开始】
在MakeJar.java所在的文件夹root下,命令:
jar cvfm MakeJar.jar MakeJar.mf makejar
这样就可以打包成一个MakeJar.jar 文件了。运行的时候可以 java -jar MakeJar.jar