在Java开发中,将项目打包成可执行的JAR文件是部署和分发应用程序的重要环节,JAR(Java Archive)文件不仅可以将.class文件、资源文件、配置文件等整合到单个压缩包中,还能通过配置清单文件实现双击运行或作为依赖库被其他项目引用,本文将详细介绍Java生成JAR文件的完整流程,包括命令行工具、构建工具以及常见问题的解决方案。

使用JDK命令行工具生成JAR文件
JDK自带的jar命令是生成JAR文件的基础工具,适合小型项目或需要手动控制打包过程的场景,其核心操作包括创建JAR文件、添加清单文件以及指定主类。
创建基本的JAR文件
假设项目包含com/example包下的Main.class文件和资源文件config.properties,可通过以下命令打包:
jar -cvf myapp.jar com/example/Main.class config.properties
参数说明:
-c:创建新的JAR文件;-v:生成详细输出,显示打包过程;-f:指定JAR文件名。
执行后,当前目录会生成myapp.jar,使用jar -tf myapp.jar可查看包内文件结构。
指定清单文件(MANIFEST.MF)
要让JAR文件可执行,需在META-INF/MANIFEST.MF中声明主类,首先创建清单文件manifest.txt:
Main-Class: com.example.Main
然后通过以下命令打包:
jar -cvfm myapp.jar manifest.txt com/example/Main.class config.properties
关键参数-m表示包含指定的清单文件,双击生成的JAR文件即可运行主类(需确保环境变量配置正确)。
打包整个目录
若项目包含多个源码文件和资源,可先编译生成target目录,再直接打包该目录:
javac -d target src/com/example/*.java jar -cvfm myapp.jar manifest.txt -C target .
-C target .表示切换到target目录并包含所有文件和子目录。

使用Maven构建工具生成JAR文件
Maven是Java项目主流的构建工具,通过标准化的目录结构和插件配置,可自动化生成JAR文件,尤其适合中大型项目。
配置Maven项目结构
标准Maven项目需遵循以下目录结构:
project-root/
├── pom.xml
├── src/
│ ├── main/
│ │ ├── java/ # 源码目录
│ │ └── resources/ # 资源目录
│ └── test/ # 测试代码目录
└── target/ # 编译输出目录
配置pom.xml文件
在pom.xml中添加maven-jar-plugin插件,并指定主类:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>myapp</artifactId>
<version>1.0-SNAPSHOT</version>
<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.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
</project>
执行打包命令
在项目根目录执行以下命令:
mvn clean package
Maven会自动编译源码、资源文件,并在target目录生成myapp-1.0-SNAPSHOT.jar,若需跳过测试,可追加-DskipTests参数。
生成可执行JAR(包含依赖)
若需将第三方依赖一同打包,需使用maven-assembly-plugin或maven-shade-plugin,以shade-plugin为例:
<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.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
执行打包后,生成的JAR文件将包含所有依赖,可直接运行。
使用Gradle构建工具生成JAR文件
Gradle以灵活的脚本配置和高效的构建速度受到开发者青睐,其Groovy或Kotlin DSL可简化JAR生成流程。
配置Gradle项目结构
project-root/
├── build.gradle
├── src/main/java/com/example/Main.java
└── src/main/resources/config.properties
配置build.gradle文件
在build.gradle中添加application插件(适合可执行JAR)或java插件(适合库JAR):

plugins {
id 'java'
id 'application'
}
group 'com.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.apache.commons:commons-lang3:3.12.0'
}
application {
mainClass = 'com.example.Main'
}
执行打包命令
执行以下命令构建JAR文件:
gradle build
生成的可执行JAR位于build/libs/目录下,文件名如myapp-1.0-SNAPSHOT.jar,若需包含依赖,可使用shadow插件(需在build.gradle中添加id 'com.github.johnrengelman.shadow' version '7.1.2',然后执行gradle shadowJar)。
常见问题与解决方案
“Failed to configure a DataSource”错误
若JAR文件运行时报错”Failed to configure a DataSource”,通常是因为未正确打包资源文件,确保资源文件位于src/main/resources目录,并在构建工具中配置资源过滤:
- Maven:默认自动处理
resources目录; - Gradle:无需额外配置,
sourceSets.main.resources已包含src/main/resources。
依赖冲突
使用Maven或Gradle时,可通过以下命令查看依赖树:
- Maven:
mvn dependency:tree - Gradle:
gradle dependencies
若存在冲突,可通过<exclusions>(Maven)或exclude group: 'xxx', module: 'yyy'(Gradle)排除重复依赖。
JAR文件无法双击运行
检查MANIFEST.MF中的Main-Class是否正确(需包含完整包名),并确保JDK环境变量JAVA_HOME配置正确,对于Windows系统,可尝试命令行运行java -jar myapp.jar。
生成JAR文件是Java项目部署的关键步骤,开发者可根据项目规模和复杂度选择合适的方式:小型项目可直接使用jar命令,中大型项目推荐Maven或Gradle等构建工具,通过合理配置清单文件、依赖管理和资源打包,可确保生成的JAR文件稳定可靠,满足不同场景的部署需求,掌握这些技能不仅能提高开发效率,还能为项目的持续集成和交付奠定基础。

















