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

相关推荐
哦虎!3 小时前
【JavaEE】网络初识
java
for_ever_love__3 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
我是人✓4 小时前
Java文件上传三方式对比:从传统到SpringBoot
java·开发语言
欣栀♡4 小时前
JVM 频繁 Full GC 先看日志括号里的 cause,jstat 的 FGC 在 JDK 8 上会骗人
java·jvm
IT研究室4 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
慧都小项5 小时前
MyEclipse 中创建和测试 JAX-RS REST 接口:从项目配置到 REST Explorer
java·restful·myeclipse·jax-rs
Wang's Blog5 小时前
Java 项目实战: 交友项目 - 入门案例:编写 Dubbo 服务提供者
java·dubbo·交友
秋饼5 小时前
Spring AI 2.0 结构化输出企业级实战:从 BeanOutputConverter 源码到生产级解析容错
java·ai·技术分享·后端开发
摇滚侠5 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
Cc.Y5 小时前
Java零基础入门:深入Java核心:文件IO与序列化全解
java·开发语言·python