首页 开发教程 JDK 工具学习系列(二):jar 命令实用教程与常见问题

JDK 工具学习系列(二):jar 命令实用教程与常见问题

开发教程 2025年12月4日
527 浏览

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

public class HelloJar {
    public static void main(String[] args) {
        System.out.println(\"Hello from JAR!\");
    }
}

编译生成 class 文件:

javac HelloJar.java

1.2 创建 jar 包

jar cf HelloJar.jar HelloJar.class
  • c:创建(create)
  • f:指定 jar 文件名(file)
  • HelloJar.jar:生成的 jar 包名
  • HelloJar.class:要打包的 class 文件

1.3 查看 jar 包内容

jar tf HelloJar.jar

输出示例:

META-INF/
META-INF/MANIFEST.MF
HelloJar.class

2. 创建可执行 jar 包

2.1 新建 manifest 文件

新建 manifest.txt,内容如下(注意最后有一个空行):

Main-Class: HelloJar


2.2 打包为可执行 jar

jar cfm HelloJar-exec.jar manifest.txt HelloJar.class
  • m:指定 manifest 文件

2.3 运行可执行 jar 包

java -jar HelloJar-exec.jar

输出:

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 时,可能出现:

WARNING: Duplicate name in Manifest: Main-Class.

原因: jar 包里已有 manifest,再次添加会有重复属性。

影响:

  • 通常不会影响 jar 包运行,最终 manifest 只保留一个 Main-Class
  • 建议 manifest 有变动时用 jar cfm ... 重新打包,保持结构干净。

3.3 只更新 class 文件

如果 manifest 没变,只是 class 文件有变动,直接用:

jar uf HelloJar-exec.jar HelloJar.class

即可,可执行 jar 依然可用,不需要重新指定 manifest。


4. 其它常用操作

  • 解压 jar 包:
    jar xf HelloJar-exec.jar
    
  • 查看 manifest 信息:
    jar xf HelloJar-exec.jar META-INF/MANIFEST.MF
    notepad META-INFMANIFEST.MF
    

5. 总结

  • jar 命令用于打包、查看、解压、更新 jar 文件
  • 创建可执行 jar 包需指定 Main-Class,manifest 文件最后要有空行
  • 只更新 class 文件时用 jar uf,可执行属性会保留
  • jar 包结构标准包含 META-INF/MANIFEST.MF

通过本次学习,我掌握了 jar 命令的基本用法、可执行 jar 的制作方法,以及常见问题的排查和解决。希望对你也有帮助!

发表评论
暂无评论

还没有评论呢,快来抢沙发~

客服

点击联系客服 点击联系客服

在线时间:09:00-18:00

关注微信公众号

关注微信公众号
客服电话

400-888-8888

客服邮箱 122325244@qq.com

手机

扫描二维码

手机访问本站

扫描二维码
搜索