当前位置:首页 > 后端开发 > 正文

Java打包JAR文件详细步骤

使用javac编译Java文件,然后通过jar命令打包成JAR文件,命令示例: jar cvf 程序名.jar 主类名.class,或利用IDE(如Eclipse/IntelliJ)直接导出可执行JAR,需指定主类入口。

将Java程序打包成JAR文件是分发和运行Java应用的标准方式,以下是详细的操作指南,涵盖命令行和主流IDE两种方法,确保符合最佳实践:

核心概念

  1. JAR文件本质

    JAR(Java Archive)是基于ZIP格式的压缩包,包含.class文件、资源文件及元数据(如MANIFEST.MF),可指定主类实现双击运行。

  2. 清单文件(MANIFEST.MF)作用

    位于META-INF/目录下,定义JAR属性(如主类路径、依赖库路径),格式要求:

    Java打包JAR文件详细步骤 第1张

    Main-Class: com.example.MainClass // 末尾必须空一行 Class-Path: lib/dependency.jar // 每行不超过72字符

命令行打包(JDK原生方式)

步骤1:编译Java代码

javac -d ./build src/*.java # 将源码编译到build目录

  • 确保JDK已安装(检查命令:javac -version)

步骤2:创建清单文件

  1. 在build/目录新建MANIFEST.MF: Main-Class: com.example.MainClass # 注意:末尾保留一个空行

步骤3:打包JAR

cd build jar cfm app.jar MANIFEST.MF com/* # 关键参数: # c-创建JAR, f-指定文件名, m-引用清单文件

步骤4:运行验证

java -jar app.jar # 测试执行

使用IDE打包(更高效)

▶ Eclipse操作流程

  1. 右击项目 → Export → 搜索”Runnable JAR”
  2. 配置选项:
    • Launch configuration:选择包含main方法的类
    • Export destination:输出路径(如app.jar)
    • Library handling:选Package required libraries(自动包含依赖)

▶ IntelliJ IDEA操作流程

  1. File → Project Structure → Artifacts → + → JAR → From modules…
  2. 选择主类(Main Class)
  3. 勾选Build on make → 点击Apply
  4. Build → Build Artifacts → 生成JAR文件

包含外部依赖的打包方案

方案1:生成FatJAR(推荐)

  • 使用Maven:在pom.xml中添加插件: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs>jar-with-dependencies</descriptorRefs> <archive> <manifest> <mainClass>com.example.Main</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build>

    执行:mvn clean compile assembly:single

    Java打包JAR文件详细步骤 第2张

方案2:分离依赖库

  1. 将依赖JAR放入lib/目录
  2. 清单文件中声明路径: Class-Path: lib/gson-2.8.9.jar lib/commons-io-2.11.jar
  3. 最终目录结构: app.jar lib/ ├─ gson-2.8.9.jar └─ commons-io-2.11.jar

常见问题解决

  1. “no main manifest attribute”

    → 清单文件未指定Main-Class或格式错误(需末尾空行)

  2. ClassNotFoundException

    → 检查Class-Path路径是否正确,依赖JAR是否缺失

  3. 中文乱码问题

    → 编译时指定编码:javac -encoding UTF-8 ...

  4. 模块化项目(JDK9+)

    → 添加module-info.java或使用jlink定制运行时

安全与优化建议

  • 代码签名:防止改动 jarsigner -keystore mykey.jks app.jar alias_name
  • 压缩资源:减小体积 jar cvfm app.jar MANIFEST.MF -C ./build . # 自动压缩

引用说明参考Oracle官方文档《JAR File Specification》及Apache Maven最佳实践,操作均通过JDK 17环境验证,IDE操作步骤基于Eclipse 2025-03与IntelliJ IDEA 2025.1版本,命令行工具为各平台通用标准,Windows/Linux/macOS均可执行。

Java打包JAR文件详细步骤 第3张

0