如何将 Java 项目打包为可执行 JAR 文件
如何将 Java 项目打包为可执行 JAR 文件
我将详细介绍将 Java 项目打包为可执行 JAR 文件的完整流程,包括使用 IDE 和命令行两种方法。
方法一:使用 IntelliJ IDEA 打包
步骤 1:配置项目结构
-
打开项目
-
点击 File > Project Structure
-
在 Project Settings 中选择 Artifacts
-
点击 + 号 > JAR > From modules with dependencies
步骤 2:配置主类
-
在 "Main Class" 字段选择主类:例如:
com.example.demo.DesktopFileSearch
-
确保选择 "extract to the target JAR" 选项
-
点击 OK
步骤 3:构建 JAR 文件
-
点击 Build > Build Artifacts
-
选择您的 artifact > Build
-
生成的 JAR 文件将位于
out/artifacts/
目录下
方法二:使用 Maven 打包
步骤 1:添加 Maven 插件
在 pom.xml
中添加以下插件配置:
<build><plugins><!-- 编译插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><!-- 创建可执行 JAR 的插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.2.0</version><configuration><archive><manifest><addClasspath>true</addClasspath><mainClass>com.example.demo.DesktopFileSearch</mainClass></manifest></archive></configuration></plugin><!-- 包含依赖的插件(可选) --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><version>3.3.0</version><configuration><archive><manifest><mainClass>com.example.demo.DesktopFileSearch</mainClass></manifest></archive><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>
</build>
步骤 2:执行打包命令
在项目根目录(包含 pom.xml 的目录)打开命令行,执行:
mvn clean package
步骤 3:获取 JAR 文件
-
生成的 JAR 文件位于
target/
目录 -
如果使用了 assembly 插件,会生成两个文件:
-
your-project-name.jar
- 不含依赖 -
your-project-name-jar-with-dependencies.jar
- 包含所有依赖
-
方法三:使用 Gradle 打包
步骤 1:配置 build.gradle
在 build.gradle
文件中添加:
plugins {id 'java'id 'application'
}application {mainClassName = 'com.example.demo.DesktopFileSearch'
}jar {manifest {attributes 'Main-Class': 'com.example.demo.DesktopFileSearch'}// 包含所有依赖(可选)from {configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }}
}
步骤 2:执行打包命令
在项目根目录执行:
gradle clean build
步骤 3:获取 JAR 文件
生成的 JAR 文件位于 build/libs/
目录
方法四:手动创建 JAR(不使用构建工具)
步骤 1:编译 Java 文件
javac -d target/classes src/main/java/com/example/demo/*.java
步骤 2:创建清单文件
创建 META-INF/MANIFEST.MF
文件:
Manifest-Version: 1.0
Main-Class: com.example.demo.DesktopFileSearch
Class-Path: .
步骤 3:打包为 JAR
jar cfm target/your-app.jar META-INF/MANIFEST.MF -C target/classes .
测试 JAR 文件
运行 JAR 文件以确保正确打包:
java -jar your-app.jar
常见问题解决
问题:运行 JAR 时出现 "No main manifest attribute"
解决方案:
-
确保 MANIFEST.MF 文件包含正确的 Main-Class 属性
-
使用
jar tf your-app.jar
检查清单文件是否正确包含 -
如果使用 Maven/Gradle,确保插件配置正确
问题:缺少依赖项
解决方案:
-
使用包含依赖的打包方式(如 maven-assembly-plugin)
-
将所有依赖 JAR 放在同一目录,使用
-cp
指定类路径:java -cp "your-app.jar:libs/*" com.example.demo.DesktopFileSearch
问题:资源文件未包含
解决方案:
-
确保资源文件位于正确位置(如 src/main/resources)
-
在构建配置中包含资源目录:
java -cp "your-app.jar:libs/*" com.example.demo.DesktopFileSearch
最佳实践
-
版本控制:在 JAR 文件名中包含版本号
-
依赖管理:
-
对于简单项目,使用包含依赖的单一 JAR
-
对于大型项目,使用 lib 目录存放依赖
-
-
签名验证:使用 jarsigner 对 JAR 进行签名
jarsigner -keystore mykeystore.jks -storepass password -keypass password your-app.jar mykey
-
瘦身打包:使用 ProGuard 或其它工具减小 JAR 大小
-
跨平台测试:在不同操作系统上测试 JAR 文件
总结打包 Java 应用程序为 JAR 文件是分发和部署的关键步骤。选择适合您项目的打包方法:
-
简单项目:使用 IDE 内置的导出功能
-
标准项目:使用 Maven 或 Gradle 构建
-
需要依赖管理:使用包含依赖的打包方式
-
特殊需求:手动创建 JAR 文件
完成 JAR 打包后,您可以进一步使用 Launch4j 或 jpackage 工具将其转换为 EXE 文件,创建完整的 Windows 安装程序。