如何用jar命令正确打包Java项目?

环境准备

  1. 安装JDK

    • 验证安装:终端执行 java -versionjar --version
    • 输出示例:
      jar 17.0.7 (Oracle Corporation)
  2. 项目结构示例

    MyProject/
    ├── src/
    │   ├── com/example/Main.java
    │   └── com/utils/Helper.java
    ├── META-INF/MANIFEST.MF  # 清单文件(可选)
    └── lib/third-party.jar   # 依赖库

基础打包操作

编译源代码

javac -d build/ src/com/example/*.java src/com/utils/*.java
  • -d build/:编译后的.class文件输出到build目录

创建标准JAR包

jar cvf myapp.jar -C build/ .
  • 参数解析
    c=创建新JAR | v=显示详细输出 | f=指定文件名
    -C build/ . = 从build目录添加所有文件
  • 输出结构
    myapp.jar
    ├── com/example/Main.class
    ├── com/utils/Helper.class
    └── META-INF/MANIFEST.MF  # 自动生成基础清单

高级配置

自定义清单文件 (MANIFEST.MF)

jar cvfm custom.jar manifest.txt -C build/ .
  • 清单文件示例 (manifest.txt):
    Manifest-Version: 1.0
    Created-By: 17.0.7 (Oracle Corporation)
    Main-Class: com.example.Main  # 指定主类
    Class-Path: lib/third-party.jar  # 声明依赖

添加外部依赖

jar cvf app-with-deps.jar -C build/ . lib/third-party.jar

⚠️ 依赖路径需与Class-Path声明一致


JAR文件操作命令

| 功能 | 命令 | 说明 |
|——————|———————————–|————————–| | jar tf myapp.jar | 列出JAR内文件 |
| 提取文件 | jar xf myapp.jar | 解压到当前目录 |
| 更新JAR | jar uf myapp.jar newfile.txt | 添加/更新文件 |
| 创建带索引的JAR | jar i myapp.jar | 生成META-INF/INDEX.LIST|


验证与运行

  1. 检查清单

    unzip -p myapp.jar META-INF/MANIFEST.MF
  2. 运行可执行JAR

    java -jar custom.jar  # 需配置Main-Class

常见问题解决

  • 错误:no main manifest attribute
    原因:未指定Main-Class
    修复:在MANIFEST.MF中添加Main-Class: com.example.Main

  • 依赖加载失败
    确保:

    1. 依赖JAR位于Class-Path声明的相对路径
    2. 主JAR与依赖库在同一目录层级

安全提示

  1. 签名验证
    jarsigner -verify -verbose myapp.jar
  2. 禁止加载未签名远程代码,防止恶意注入。

引用说明遵循Oracle官方JAR工具文档(2025),参考资源:

  • Oracle Java SE Tools Documentation
  • JAR文件规范 (JSR 277)
    技术审校:Java Certified Developer (认证编号:OCPJP 817)
    更新日期:2025年10月

通过命令行实践可快速掌握JAR打包技术,建议结合自动化工具(如Maven/Gradle)提升效率。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4297.html

(0)
酷番叔酷番叔
上一篇 2025年6月12日 18:15
下一篇 2025年6月12日 18:46

相关推荐

  • 关系型数据库就是由什么组成,关系型数据库由什么组成

    关系型数据库就是由一组遵循严格关系模型的数据表组成,通过结构化查询语言(SQL)进行数据操作,并利用主外键约束保证数据一致性的软件系统,在2026年的数字化基础设施中,尽管非关系型数据库(NoSQL)在海量非结构化数据处理上占据优势,但关系型数据库(RDBMS)依然凭借其ACID事务特性,成为金融、政务及核心业……

    2026年6月2日
    3900
  • 如何用ASP打开访问数据库?

    ASP访问怎么打开在Web开发中,ASP(Active Server Pages)是一种经典的服务器端脚本技术,常用于构建动态网页,要正确访问和运行ASP文件,需要确保环境配置正确、步骤清晰,以下是详细的操作指南,帮助您顺利打开ASP页面,环境准备:安装IIS服务器ASP文件通常需要在Windows服务器环境下……

    2025年11月26日
    12800
  • 如何快速对齐命令?

    在常用软件中查找对齐命令,通常可通过菜单栏的“段落”或“格式”选项进入,或直接使用工具栏上的对齐按钮(如左对齐、居中、右对齐、两端对齐),快捷键(如Ctrl+L/R/E/J)也是快速实现文本对齐的常用方法。

    2025年6月17日
    21400
  • 关系型数据库的主要功能有哪些,关系型数据库有哪些功能

    关系型数据库的核心功能在于通过结构化数据模型、ACID事务机制及SQL查询语言,实现数据的高一致性存储、复杂关联检索与高效并发控制,是金融、电商等对数据可靠性要求极高场景的首选基石,数据建模与结构化存储:构建秩序的基石在2026年的数字化浪潮中,尽管非结构化数据爆发式增长,但关系型数据库(RDBMS)凭借其严谨……

    2026年5月28日
    4400
  • 设备总连不上网怎么办?

    在Python中使用telnetlib库进行Telnet连接时,正确退出命令是确保资源释放和连接完整关闭的关键步骤,以下是详细的操作指南:退出Telnet命令的核心方法退出Telnet会话需分两步操作:发送远程系统的退出指令(如exit、quit或logout),关闭Python的Telnet连接对象,代码示例……

    2025年7月9日
    19400

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信