1. 使用jar命令打包:
- 基本语法:`jar cvf 目标文件名.jar 源文件/目录`
- 示例:`jar cvf myapp.jar com/`
- 参数说明:
c - 创建新归档
v - 输出详细过程
f - 指定文件名
m - 包含清单文件
e - 设置应用入口点
2. 使用Maven打包:
- 在pom.xml中配置:
xml
- 执行命令:`mvn package`
3. 使用Gradle打包:
- 在build.gradle中配置:
groovy
plugins {
id 'java'
}
jar {
manifest {
attributes 'Main-Class': 'com.example.Main'
}
}
- 执行命令:`gradle build`
4. 可执行JAR打包:
- 需要指定Main-Class清单属性
- 使用maven-shade-plugin可以创建包含依赖的fat jar
- Spring Boot项目使用spring-boot-maven-plugin打包
5. 高级打包技巧:
- 多模块项目打包
- 资源文件处理
- 依赖排除
- 环境区分打包
- 数字签名
6. 常见问题解决:
- 类路径问题
- 依赖冲突
- 版本兼容性
- 资源加载异常
- 清单文件格式错误
7. 性能优化:
- 精简依赖
- 代码混淆
- 多Dex处理
- 延迟加载
- 模块化设计
8. 安全注意事项:
- 代码混淆
- 资源加密
- 签名验证
- 反编译防护
- 权限控制
在实际开发中,根据项目需求选择合适的打包方式,并注意处理好依赖管理、资源配置和性能优化等问题,才能确保最终生成的JAR包能够正常运行并发挥最佳性能。同时,随着Java模块化系统的发展,还需要关注JPMS相关打包技术的变化。