将class文件打包成jar包
jar -cvf test.jar TestA.class TestB.class
也可以用通配符
jar -cvf test.jar *.class
或者,将整个文件夹打包进去
jar -cvf test.jar com/github/
打包后的jar包会自动生成摘要文件:META-INF/MANIFEST.MF,内容如下
Manifest-Version: 1.0
Created-By: 1.8.0_162 (Oracle Corporation)
解压jar包
jar -xvf test.jar
查看jar包内的文件清单
jar -tvf test.jar
0 Mon Oct 12 16:50:14 CST 2020 META-INF/
69 Mon Oct 12 16:50:14 CST 2020 META-INF/MANIFEST.MF
0 Mon Oct 12 16:50:02 CST 2020 TestA.class
0 Mon Oct 12 16:50:06 CST 2020 TestB.class
新增或更新jar包内的文件
以下命令将会更新jar包内的TestA.class文件
jar -uvf test.jar TestA.class
如果文件在jar中不存在,则添加进jar中,如下所示
// 添加Main.class
jar -uvf test.jar Main.class
// 查看jar中的文件列表
jar -tvf test.jar
查看的结果如下,可以看到,多出了Main.class
0 Mon Oct 12 16:50:14 CST 2020 META-INF/
69 Mon Oct 12 16:50:14 CST 2020 META-INF/MANIFEST.MF
0 Mon Oct 12 16:50:02 CST 2020 TestA.class
0 Mon Oct 12 16:50:06 CST 2020 TestB.class
414 Mon Oct 12 17:23:04 CST 2020 Main.class
执行jar
以下的内容会介绍如何执行jar包,Main.class作为可执行的入口类,先给出Main.java的源码,如下所示
public class Main {
public static void main(java.lang.String[] args) {
System.out.println("hello world!");
}
}
指定入口类执行jar
以下两条命令都可以指定jar包的入口类,执行main方法
java -classpath test.jar Main
-cp是-classpath的缩写形式,如果jar包还依赖了其他第三方jar包,列出来即可,如下所示
java -cp test.jar:lib/log4j.jar:lib/commons-io.jar Main
指定jar默认入口
可以把某个类作为jar包的默认执行入口,使用如下命令
jar -uvfe test.jar Main
执行后,我们解压jar包,可以看到META-INF/MANIFEST.MF文件多出了一行
Manifest-Version: 1.0
Created-By: 1.8.0_162 (Oracle Corporation)
Main-Class: Main
jar包就有了默认的执行入口,那么我们就可以使用简捷的方式运行jar了,如下
java -jar test.jar
指定classpath目录环境启动
java -Xbootclasspath/p:/etc/config/ -jar test.jar
通过这种方式,可以把配置文件放在/etc/config/目录中,java代码扫描classpath下的配置文件时,就会以-Xbootclasspath/p:指定的目录做为优先查找路径。这样可以把配置和jar分离。
网友评论