JDK 工具学习系列(二):jar 命令实用教程与常见问题
本文记录了我在 Windows PowerShell 下学习 JDK 自带 jar 命令的全过程,包括实际操作、遇到的问题和官方说明,适合 Java 初学者参考。
0. 官方命令说明
- jar - create an archive for classes and resources, and manipulate or restore individual classes or resources from an archive
1. 基础操作流程
1.1 编写并编译 Java 程序
新建 HelloJar.java:
java
public class HelloJar {
public static void main(String[] args) {
System.out.println("Hello from JAR!");
}
}
编译生成 class 文件:
powershell
javac HelloJar.java
1.2 创建 jar 包
powershell
jar cf HelloJar.jar HelloJar.class
c:创建(create)f:指定 jar 文件名(file)HelloJar.jar:生成的 jar 包名HelloJar.class:要打包的 class 文件
1.3 查看 jar 包内容
powershell
jar tf HelloJar.jar
输出示例:
arduino
META-INF/
META-INF/MANIFEST.MF
HelloJar.class
jar 包会自动包含
META-INF/目录和MANIFEST.MF文件。
2. 创建可执行 jar 包
2.1 新建 manifest 文件
新建 manifest.txt,内容如下(注意最后有一个空行):
css
Main-Class: HelloJar
2.2 打包为可执行 jar
powershell
jar cfm HelloJar-exec.jar manifest.txt HelloJar.class
m:指定 manifest 文件
2.3 运行可执行 jar 包
powershell
java -jar HelloJar-exec.jar
输出:
csharp
Hello from JAR!
3. 常见问题与解决
3.1 no main manifest attribute, in HelloJar-exec.jar
原因: manifest 文件最后一行没有空行,导致 Main-Class 属性未被正确识别。
解决: manifest.txt 最后一行必须有换行符。
3.2 manifest 重复警告
当用 jar ufm 更新 manifest 时,可能出现:
vbnet
WARNING: Duplicate name in Manifest: Main-Class.
原因: jar 包里已有 manifest,再次添加会有重复属性。
影响:
- 通常不会影响 jar 包运行,最终 manifest 只保留一个
Main-Class。 - 建议 manifest 有变动时用
jar cfm ...重新打包,保持结构干净。
3.3 只更新 class 文件
如果 manifest 没变,只是 class 文件有变动,直接用:
powershell
jar uf HelloJar-exec.jar HelloJar.class
即可,可执行 jar 依然可用,不需要重新指定 manifest。
4. 其它常用操作
-
解压 jar 包:
powershelljar xf HelloJar-exec.jar -
查看 manifest 信息:
powershelljar xf HelloJar-exec.jar META-INF/MANIFEST.MF notepad META-INF\MANIFEST.MF
5. 总结
jar命令用于打包、查看、解压、更新 jar 文件- 创建可执行 jar 包需指定
Main-Class,manifest 文件最后要有空行 - 只更新 class 文件时用
jar uf,可执行属性会保留 - jar 包结构标准包含
META-INF/和MANIFEST.MF
通过本次学习,我掌握了 jar 命令的基本用法、可执行 jar 的制作方法,以及常见问题的排查和解决。希望对你也有帮助!