jar cvf 程序名.jar 主类名.class
,或利用IDE(如Eclipse/IntelliJ)直接导出可执行JAR,需指定主类入口。将Java程序打包成JAR文件是分发和运行Java应用的标准方式,以下是详细的操作指南,涵盖命令行和主流IDE两种方法,确保符合最佳实践:
核心概念
- JAR文件本质
JAR(Java Archive)是基于ZIP格式的压缩包,包含.class
文件、资源文件及元数据(如MANIFEST.MF
),可指定主类实现双击运行。 - 清单文件(MANIFEST.MF)作用
位于META-INF/
目录下,定义JAR属性(如主类路径、依赖库路径),格式要求:Main-Class: com.example.MainClass // 末尾必须空一行 Class-Path: lib/dependency.jar // 每行不超过72字符
命令行打包(JDK原生方式)
步骤1:编译Java代码
javac -d ./build src/*.java # 将源码编译到build目录
- 确保JDK已安装(检查命令:
javac -version
)
步骤2:创建清单文件
- 在
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操作流程
- 右击项目 → Export → 搜索”Runnable JAR”
- 配置选项:
- Launch configuration:选择包含main方法的类
- Export destination:输出路径(如
app.jar
) - Library handling:选
Package required libraries
(自动包含依赖)
▶ IntelliJ IDEA操作流程
- File → Project Structure → Artifacts → + → JAR → From modules…
- 选择主类(Main Class)
- 勾选
Build on make
→ 点击Apply - 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
方案2:分离依赖库
- 将依赖JAR放入
lib/
目录 - 清单文件中声明路径:
Class-Path: lib/gson-2.8.9.jar lib/commons-io-2.11.jar
- 最终目录结构:
app.jar lib/ ├─ gson-2.8.9.jar └─ commons-io-2.11.jar
常见问题解决
- “no main manifest attribute”
→ 清单文件未指定Main-Class
或格式错误(需末尾空行) - ClassNotFoundException
→ 检查Class-Path
路径是否正确,依赖JAR是否缺失 - 中文乱码问题
→ 编译时指定编码:javac -encoding UTF-8 ...
- 模块化项目(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均可执行。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/41582.html