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
2
G:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\06\6.12\打包成可执行jar
└─Test.java

Test.java

这里测试的java源码如下:

1
2
3
4
5
6
7
8
9
package test;

public class Test
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}

带包编译 字节码文件生成在当前路径下

使用命令:javac -d . Test.java编译java源文件,指定在当前路径下生成.class文件。

编译后的目录结构

1
2
3
4
G:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\06\6.12\打包成可执行jar
├─test\
│ └─Test.class
└─Test.java

打包成jar包时指定主类

使用命令:jar -cvfe Test.jar test.Test ./test将编译后的.class文件打包到jar包中

1
2
3
4
G:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\06\6.12\打包成可执行jar>jar -cvfe Test.jar test.Test ./test
已添加清单
正在添加: test/(输入 = 0) (输出 = 0)(存储了 0%)
正在添加: test/Test.class(输入 = 419) (输出 = 290)(压缩了 30%)

命令解释

  • -c表示要创建一个JAR
  • -v表示输出创建JAR包时的具体信息
  • -f对应后面的第1个参数:Test.jar,表示要打包到Test.jar
  • -e对应后面的第2个参数test.Test,表示程序的主类
  • 最后的./test表示存放字节码文件的目录,也就是上面javac生成的目录

查看打包后的JAR包结构是否正确

1
2
3
4
5
G:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\06\6.12\打包成可执行jar>jar -tf Test.jar
META-INF/
META-INF/MANIFEST.MF
test/
test/Test.class

注意.class文件要放在正确的包下,如果Test.class没有放在test包下,则说明上述打包有问题.

运行jar包

使用命令:java -jar Test.jar即可运行这个可执行jar包。

1
2
G:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\06\6.12\打包成可执行jar>java -jar Test.jar
Hello World!