在Java开发中,将项目打包成可执行的JAR(Java Archive)包是部署和分发应用程序的关键步骤,JAR包不仅便于管理和传输,还能包含项目所需的依赖资源,实现独立运行,本文将系统介绍Java导出JAR包的多种方法,涵盖IDE工具、Maven/Gradle构建工具以及命令行操作,帮助开发者根据项目需求选择合适的打包方式。

使用IDE工具导出JAR包
对于习惯图形化界面的开发者,集成开发环境(IDE)提供了便捷的JAR包导出功能,以IntelliJ IDEA和Eclipse为例,操作流程如下:
IntelliJ IDEA操作步骤
- 配置项目结构:打开项目后,进入
File > Project Structure,选择Artifacts,点击号新建JAR>From modules with dependencies。 - 模块与主类设置:在弹出的窗口中,选择主模块(通常是包含main方法的模块),勾选
Main Class并指定程序入口类,若需包含依赖库,勾选Extract to the JAR(将依赖库解压到JAR包中)或Copy to the JAR(将依赖库作为独立文件打包)。 - 资源文件处理:若项目包含配置文件(如
application.properties)、XML或图片等非Java资源,需确保在Build Artifacts时已正确包含,可通过Custom manifest指定Class-Path或Main-Class属性。 - 构建与导出:完成配置后,点击
OK返回,选择Build > Build Artifacts,选中已配置的JAR包执行构建,生成的JAR文件将默认存放在项目目录/out/artifacts/下。
Eclipse操作步骤
- 导出向导:右键点击项目,选择
Export > Runnable JAR file,进入JAR导出向导。 - 配置运行环境:在
Launch configuration中选择已配置的运行环境(通常包含主类信息),在Export destination中设置JAR包保存路径。 - 依赖处理选项:在
Library handling中,可选择Package required libraries into generated JAR(将依赖打包进JAR)或Copy required libraries into a sub-folder(依赖复制到子目录),前者适合独立部署,后者便于调试依赖冲突。 - 完成导出:点击
Finish,Eclipse将自动构建JAR包,并在控制台输出构建日志。
使用Maven构建工具导出JAR包
Maven作为Java项目主流构建工具,通过maven-jar-plugin和maven-assembly-plugin可实现灵活的JAR包打包,以下是核心配置步骤:
基础JAR包打包
- 插件配置:在
pom.xml中添加maven-jar-plugin,指定Main-Class和项目构建输出目录:<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <mainClass>com.example.MainApplication</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build> - 执行打包:在项目根目录执行命令
mvn clean package,生成的JAR包将位于target/目录下,默认名称为项目名-版本号.jar。
可执行JAR包(包含依赖)
若需将依赖库一同打包,可使用maven-assembly-plugin或maven-shade-plugin:
- Assembly插件配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>com.example.MainApplication</mainClass> </manifest> </archive> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> - 执行打包:运行
mvn clean package assembly:single,生成的JAR包后缀为-jar-with-dependencies.jar,可直接通过java -jar命令执行。
避免依赖冲突
使用maven-shade-plugin可解决依赖冲突,并生成“胖JAR”(Fat JAR):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.MainApplication</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
使用Gradle构建工具导出JAR包
Gradle以简洁的配置和高效的构建著称,通过jar任务和插件可实现JAR包打包:

基础JAR包打包
- 配置主类:在
build.gradle中添加以下配置:jar { manifest { attributes 'Main-Class': 'com.example.MainApplication' } } - 执行打包:运行
gradle build,生成的JAR包位于build/libs/目录下。
可执行JAR包(包含依赖)
使用shadow插件(需先添加插件依赖):
plugins {
id 'com.github.johnrengelman.shadow' version '7.1.2'
}
shadowJar {
archiveClassifier.set('all')
manifest {
attributes 'Main-Class': 'com.example.MainApplication'
}
}
执行gradle shadowJar后,生成的-all.jar即为包含依赖的可执行JAR包。
自定义JAR包结构
若需排除特定依赖或自定义资源文件,可通过exclude或merge方法实现:
shadowJar {
exclude 'org.slf4j:slf4j-simple'
mergeServiceFiles()
}
命令行手动打包JAR包
对于轻量级项目或无构建工具的场景,可通过JDK自带的jar命令手动打包:
基础命令
jar -cvf myapp.jar -C target/classes .
-c:创建新JAR包-v:显示详细输出-f:指定JAR包文件名-C target/classes:切换到目标目录
指定主类
需创建META-INF/MANIFEST.MF如下:

Manifest-Version: 1.0
Main-Class: com.example.MainApplication
打包命令:
jar -cvfm myapp.jar META-INF/MANIFEST.MF -C target/classes .
添加依赖库
将依赖JAR包解压后与项目类文件一同打包,或通过Class-Path属性指定依赖路径:
Class-Path: lib/dependency1.jar lib/dependency2.jar
JAR包常见问题与解决方案
- 依赖缺失:若JAR包运行时报
ClassNotFoundException,检查是否正确包含依赖库,或通过java -jar myapp.jar查看依赖路径。 - 主类未找到:确保
MANIFEST.MF中的Main-Class路径正确(需包含包名,如com.example.Main)。 - 资源文件读取失败:使用
ClassLoader.getResource()或Class.getResouceAsStream()读取资源,避免使用绝对路径。 - Windows系统下运行失败:检查JAR包是否为可执行文件,或在命令行中显式指定
java -jar。
通过以上方法,开发者可根据项目规模和复杂度选择合适的JAR包导出方式,无论是IDE的图形化操作,还是构建工具的自动化配置,亦或是命令行的手动控制,核心目标均是将Java应用程序及其依赖打包为独立、可执行的单元,实现便捷的部署与分发,掌握多种打包技巧,能有效提升开发效率,解决不同场景下的打包需求。


















