文章目录

  • 1.背景
  • 2.操作步骤
  • 2.1. 准备好java源文件
  • 2.2 确认java源文件中是否有包名
  • 2.3 编译java文件
  • 2.4 初步打包
  • 2.5 解压jar包,得到MANIFEST.MF文件
  • 2.6 修改MANIFEST.MF文件
  • 2.7 再次打包
  • 3.验证
  • 4.打包参数参考
  • 5.参考文章


1.背景

今天,无意中翻出了N年之前年少青涩时写的一个java awt的程序,在想验证某个问题的时候,希望它能以jar包的形式独立运行,而不是在ide中运行。所以就想把它手动打成可执行jar包。

2.操作步骤
2.1. 准备好java源文件

例如Hello.java

2.2 确认java源文件中是否有包名

源代码中有无包名,后面的操作有些许不同,注意区别。

2.3 编译java文件

进入test目录,执行如下命令,生成class文件

java Hello.java
2.4 初步打包

进入test目录,执行如下命令,初步生成jar文件,如果有多个class文件,则在命令最后加空格追加就可以

jar -cvf Hello.jar Hello.class

如果提示jar命令不存在,可以参考此篇文章解决执行jar命令报错:jar不是内部或外部命令,也不是可运行的程序

2.5 解压jar包,得到MANIFEST.MF文件

执行如下命令,在class文件同级目录会生成一个META-INF目录,里面有一个MANIFEST.MF文件。

jar -xvf Hello.jar
2.6 修改MANIFEST.MF文件

使用文件编辑器打开MANIFEST.MF文件,添加Main-Class内容
Hello.java里不带包名

Manifest-Version: 1.0
Created-By: 11.0.10 (Oracle Corporation)
Main-Class: Hello

Hello.java里带包名

Manifest-Version: 1.0
Created-By: 11.0.10 (Oracle Corporation)
Main-Class: test.Hello

修改完毕后记得保存。

2.7 再次打包

再次使用jar命令进行打包,这里同样要注意源代码中有无包名方法有所区别。

#Hello.java里不带包名,在java文件同目录执行
jar -cvfm Hello.jar META-INF/MANIFEST.MF Hello.class
#Hello.java里带包名,在包名目录同级目录执行
jar -cvfm Hello.jar test/META-INF/MANIFEST.MF test/Hello.class
3.验证

使用java -jar Hello.jar或者直接双击jar包,能正常运行代表打包成功。

4.打包参数参考
-c  创建一个jar包
-t  显示jar中的内容列表
-x  解压jar包
-u  添加文件到jar包中
-f  指定jar包的文件名
-v  输出详细报告
-m  指定MANIFEST.MF文件
-0  生成jar包时不压缩内容
-M  不生成清单文件MANIFEST.MF
-i  为指定的jar文件创建索引文件
-C  可在相应的目录下执行命令
5.参考文章

Java:打包成jar包