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

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 包:

    powershell 复制代码
    jar xf HelloJar-exec.jar
  • 查看 manifest 信息:

    powershell 复制代码
    jar 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 的制作方法,以及常见问题的排查和解决。希望对你也有帮助!

相关推荐
Magic--10 分钟前
深入解析管道:最基础的进程间通信(IPC)实现
java·服务器·unix
架构师沉默39 分钟前
为什么国外程序员都写独立博客,而国内都在公众号?
java·后端·架构
带刺的坐椅1 小时前
SolonCode v2026.4.1 发布(比 ClaudeCode 简约的编程智能体)
java·ai·llm·agent·solon-ai·claudecode·soloncode
殷紫川1 小时前
从单体到亿级流量:登录功能全场景设计指南,踩过的坑全给你填平了
java
Filwaod1 小时前
Cursor+IDEA开发问题
java·idea·cursor
爱丽_1 小时前
Spring 事务:传播行为、失效场景、回滚规则与最佳实践
java·后端·spring
timi先生1 小时前
语料库全栈项目部署 (Vue + Java + CQPweb)
java·前端·vue.js
sunwenjian8862 小时前
Java进阶--IO流
java·开发语言
客卿1232 小时前
滑动窗口--模板
java·算法
zjjsctcdl2 小时前
java与mysql连接 使用mysql-connector-java连接msql
java·开发语言·mysql