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

Java怎么打包成jar文件

使用Maven或Gradle构建工具,在项目根目录执行 mvn package或 gradle build命令自动打包,若用IDE,右键项目选择Export或Build Artifacts生成可执行JAR,需指定主类入口。

核心概念

  1. JAR文件本质

    Java ARchive(JAR)是压缩格式的Java类文件、资源文件和元数据(如MANIFEST.MF)的集合,类似ZIP文件。

  2. 可执行JAR要求

    MANIFEST.MF文件中必须指定主类:Main-Class: com.example.Main


打包方法详解

方法1:使用IDE(推荐初学者)

IntelliJ IDEA步骤:

  1. 打开项目 → 顶部菜单选 File > Project Structure
  2. 左侧 Artifacts → 点 → JAR > From modules with dependencies
  3. 选择主类(Main Class)→ 设置输出目录(Output directory)
  4. 点击 Apply → 返回编辑器,顶部菜单 Build > Build Artifacts
  5. 选择 Build → 生成的JAR在项目目录的out/artifacts/下

Eclipse步骤:

  1. 右键项目 → Export → 搜索 Runnable JAR file
  2. 选择启动配置(Launch configuration)和主类
  3. 设置输出路径 → 选择依赖处理方式:
    • Extract required libraries:解压依赖到JAR内(适合简单项目)
    • Package required libraries:依赖JAR放入同级libs文件夹
  4. 点击 Finish


方法2:使用Maven(自动化构建)

  1. 配置pom.xml

    添加maven-jar-plugin和主类声明: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifest> <mainClass>com.example.Main</mainClass> <!-- 替换为你的主类 --> </manifest> </archive> </configuration> </plugin> </plugins> </build>

  2. 生成可执行JAR

    终端执行:

    Java怎么打包成jar文件 第1张

    mvn clean package
  3. 输出位置

    生成的JAR在target/目录,命名为项目名-版本.jar

处理依赖(生成含依赖的Fat JAR)

使用maven-assembly-plugin:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.example.Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>

执行mvn package后,target/目录生成项目名-版本-jar-with-dependencies.jar


方法3:使用Gradle

  1. 配置build.gradle

    启用application插件并指定主类:

    Java怎么打包成jar文件 第2张

    plugins { id 'application' } application { mainClass = 'com.example.Main' // 替换为你的主类 }
  2. 生成标准JAR

    执行: gradle jar

    JAR输出在build/libs/

生成Fat JAR

添加shadow插件(推荐):

plugins { id 'com.github.johnrengelman.shadow' version '8.1.1' }

执行:

gradle shadowJar

输出文件为build/libs/项目名-all.jar


方法4:手动打包(理解原理)

  1. 编译所有Java文件 javac -d ./out src/**/*.java
  2. 创建MANIFEST.MF

    在out/目录新建MANIFEST.MF Manifest-Version: 1.0 Main-Class: com.example.Main # 替换主类 Class-Path: libs/dependency1.jar libs/dependency2.jar # 若有依赖

  3. 打包JAR jar cvfm app.jar ./out/MANIFEST.MF -C ./out .
    • c创建新JAR
    • v输出详细信息
    • f指定文件名
    • m包含清单文件


运行与验证

  • 启动命令 java -jar your-app.jar
  • 依赖处理

    若依赖在外部libs/目录,需保持MANIFEST.MF中Class-Path路径一致。


常见问题解决

  1. “no main manifest attribute”

    原因:未指定主类。

    修复:检查MANIFEST.MF的Main-Class路径是否正确,或重新配置构建工具。

  2. ClassNotFoundException

    原因:依赖未包含。

    修复:

    • 使用Fat JAR打包(推荐)
    • 或将依赖JAR放入Class-Path指定目录
  3. 编码问题

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


最佳实践

  • 自动化构建:优先用Maven/Gradle,减少手动错误
  • 版本管理:在JAR名中包含版本号(如app-1.0.0.jar)
  • 依赖隔离:生产环境推荐使用Docker容器化部署
  • 安全扫描:使用OWASP Dependency-Check扫描依赖漏洞


引用说明基于Oracle官方JAR文档、Apache Maven指南、Gradle手册及IDE官方文档综合整理,确保方法经过实践验证,具体命令参数可参考:

  • Oracle JAR工具:https://docs.oracle.com/javase/tutorial/deployment/jar/
  • Maven JAR插件:https://maven.apache.org/plugins/maven-jar-plugin/
  • Gradle Shadow插件:https://github.com/johnrengelman/shadow

Java怎么打包成jar文件 第3张

0