6.12.2 创建可执行的JAR包
6.12.2 创建可执行的JAR包
当一个应用程序开发成功后,大致有如下三种发布方式
1. 编译成平台相关的可执行性文件
使用平台相关的编译器将整个应用编译成平台相关的可执行性文件。
这种方式常常需要第三方编译器的支持,而且编译生成的可执行性文件丧失了跨平台特性,甚至可能有一定的性能下降。
2. 为应用编辑一个批处理文件
以Windows
操作系统为例,批处理文件中只需要定义如下命令:java package.MainClass
当用户单击上面的批处理文件时,系统将执行批处理文件的java
命令,从而运行程序的主类。
运行Java程序时不带CMD控制台
如果不想保留运行Java
程序的命令行窗口,也可在批处理文件中定义如下命令:start javaw package.MainClass
3. 做成可执行JAR包
把应用程序压缩成JAR
包来发布是比较典型的做法,如果开发者把整个应用制作成一个可执行的JAR
包交给用户,那么用户使用起来就方便了。在Windows
下安装JRE
时,安装文件会将*.jar
文件映射成由javaw.exe
打开。对于一个可执行的JAR
包,用户只需要双击它就可以运行程序了,
下面介绍如何制作可执行的JAR
包。
创建可执行JAR包的关键
创建可执行的JAR
包的关键在于:让javaw
命令知道JAR
包中哪个类是主类, 这样javaw
命令可以通过运行该主类来运行程序。
创建JAR包时通过jar命令的e选项指定主类
jar
命令有一个-e
选项,该选项指定JAR
包中作为程序入口的主类的类名。因此,制作一个可执行的JAR
包只要增加-e
选项即可。例如如下命令:
jar cvfe test.jar test.Test test
上面命令把test
目录下的所有文件都压缩到test.jar
包中,并指定使用test.Test
类作为程序的入口.
运行jar包的方法
运行上面的JAR
包有两种方式。
- 使用
java
命令,使用java
运行时的语法是:java -jar test.jar
。 - 使用
javaw
命令,使用javaw
运行时的语法是:javaw test.jar
。
当创建JAR
包时,所有的类都必须放在与包结构对应的目录结构中,就像上面-e
选项指定的Test
类,表明入口类为Test
因此,必须在JAR
包下包含Test.class
文件。
实例
下面来演示如何将下面的java
文件打包成可执行jar
包:
目录结构
1 | G:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\06\6.12\打包成可执行jar |
Test.java
这里测试的java
源码如下:
1 | package test; |
带包编译 字节码文件生成在当前路径下
使用命令:javac -d . Test.java
编译java
源文件,指定在当前路径下生成.class
文件。
编译后的目录结构
1 | G:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\06\6.12\打包成可执行jar |
打包成jar包时指定主类
使用命令:jar -cvfe Test.jar test.Test ./test
将编译后的.class
文件打包到jar
包中
1 | G:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\06\6.12\打包成可执行jar>jar -cvfe Test.jar test.Test ./test |
命令解释
-c
表示要创建一个JAR
包-v
表示输出创建JAR
包时的具体信息-f
对应后面的第1个参数:Test.jar
,表示要打包到Test.jar
中-e
对应后面的第2个参数test.Test
,表示程序的主类- 最后的
./test
表示存放字节码文件的目录,也就是上面javac
生成的目录
查看打包后的JAR包结构是否正确
1 | G:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\06\6.12\打包成可执行jar>jar -tf Test.jar |
注意.class
文件要放在正确的包下,如果Test.class
没有放在test
包下,则说明上述打包有问题.
运行jar包
使用命令:java -jar Test.jar
即可运行这个可执行jar
包。
1 | G:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\06\6.12\打包成可执行jar>java -jar Test.jar |