Java项目Ubuntu编译最佳实践
导读:Ubuntu下Java项目编译最佳实践 一 环境准备与版本管理 安装并验证 JDK:优先选择 LTS 版本(如 OpenJDK 11 或 17),使用包管理器安装,安装后用 java -version 与 javac -version 校...
Ubuntu下Java项目编译最佳实践
一 环境准备与版本管理
- 安装并验证 JDK:优先选择 LTS 版本(如 OpenJDK 11 或 17),使用包管理器安装,安装后用 java -version 与 javac -version 校验版本一致性。
- 多版本共存与切换:使用 update-alternatives 管理多个 JDK,便于在不同项目间快速切换;设置 JAVA_HOME 指向所选 JDK,并将 $JAVA_HOME/bin 加入 PATH,保证命令行与构建工具使用统一 JDK。
- 基础工具:按需安装 Git(源码管理)、构建工具(Maven/Gradle)等常用开发工具,减少后续环境不一致问题。
二 构建工具选择与标准命令
- 原生编译(适合简单项目或学习场景):使用 javac 指定源码目录与目标目录,依赖通过 -cp 传入;包结构需与目录一致,运行时使用完整类名(含包名)。
- Maven 项目(约定优于配置):在项目根目录执行 mvn compile 编译、mvn package 打包;常用生命周期还包括 clean(清理)、test(运行单元测试)。打包产物默认在 target/ 目录。
- Gradle 项目(灵活与可扩展):在项目根目录执行 gradle build 完成编译、测试与打包;常用任务包括 classes、jar、testClasses 等,产物默认在 build/libs/ 目录。
三 打包与可执行 JAR 配置
- 可执行 Fat JAR(推荐):将所有依赖打进一个可执行 JAR,便于分发与运行。
- Maven 示例(使用 maven-assembly-plugin 或 maven-shade-plugin,二选一或按需组合):
- 使用 maven-assembly-plugin
< build> < plugins> < plugin> < groupId> org.apache.maven.plugins< /groupId> < artifactId> maven-assembly-plugin< /artifactId> < version> 3.6.0< /version> < configuration> < descriptorRefs> < descriptorRef> jar-with-dependencies< /descriptorRef> < /descriptorRefs> < archive> < manifest> < mainClass> com.example.App< /mainClass> < /manifest> < /archive> < /configuration> < executions> < execution> < id> make-assembly< /id> < phase> package< /phase> < goals> < goal> single< /goal> < /goals> < /execution> < /executions> < /plugin> < /plugins> < /build> - 使用 maven-shade-plugin(更灵活处理冲突与资源)
< plugin> < groupId> org.apache.maven.plugins< /groupId> < artifactId> maven-shade-plugin< /artifactId> < version> 3.5.0< /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.App< /mainClass> < /transformer> < /transformers> < /configuration> < /execution> < /executions> < /plugin>
- 使用 maven-assembly-plugin
- Gradle 示例(使用 application 插件或手动配置 jar 任务):
- application 插件(同时提供 run 任务)
plugins { id 'application' } application { mainClass = 'com.example.App' } - 手动配置 jar 任务
jar { manifest { attributes 'Main-Class': 'com.example.App' } from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } }
- application 插件(同时提供 run 任务)
- Maven 示例(使用 maven-assembly-plugin 或 maven-shade-plugin,二选一或按需组合):
- 运行与产物路径:构建完成后,使用 java -jar your-app.jar 运行;Maven 产物在 target/,Gradle 产物在 build/libs/。
四 本地与服务器部署及运行
- 传输与运行:使用 scp 将可执行 JAR 上传至目标服务器,执行 java -jar app.jar 启动;生产环境建议配合 进程守护 与 日志轮转。
- systemd 服务示例(创建文件:/etc/systemd/system/myapp.service):
常用命令:sudo systemctl daemon-reload、sudo systemctl enable myapp.service、sudo systemctl start myapp.service、sudo systemctl status myapp.service。[Unit] Description=My Java Application After=network.target [Service] Type=simple User=appuser ExecStart=/usr/bin/java -jar /opt/myapp/app.jar SuccessExitStatus=143 Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target
五 质量保障与常见问题处理
- 质量保障:在 CI/构建流程中强制执行 mvn test 或 gradle test,确保测试通过后再打包与部署;必要时集成覆盖率与静态检查工具,提升交付质量。
- 常见问题速查
- 类路径问题:依赖未正确加入 -cp 或构建产物缺少依赖,检查构建配置与运行命令的类路径参数。
- 包与目录不一致:存在 package 声明时,源码目录结构必须与包名一致;运行时使用完整类名(如 com.example.App)。
- 环境变量问题:确认 JAVA_HOME 与 PATH 指向期望的 JDK,避免构建工具与命令行使用不同版本导致行为差异。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Java项目Ubuntu编译最佳实践
本文地址: https://pptw.com/jishu/751295.html
