首页主机资讯Java项目Ubuntu编译最佳实践

Java项目Ubuntu编译最佳实践

时间2025-11-19 16:28:07发布访客分类主机资讯浏览1347
导读: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 完成编译、测试与打包;常用任务包括 classesjartestClasses 等,产物默认在 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>
        
        
    • 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) }
        
          }
        
        }
            
        
  • 运行与产物路径:构建完成后,使用 java -jar your-app.jar 运行;Maven 产物在 target/,Gradle 产物在 build/libs/

四 本地与服务器部署及运行

  • 传输与运行:使用 scp 将可执行 JAR 上传至目标服务器,执行 java -jar app.jar 启动;生产环境建议配合 进程守护日志轮转
  • systemd 服务示例(创建文件:/etc/systemd/system/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
    
    常用命令:sudo systemctl daemon-reloadsudo systemctl enable myapp.servicesudo systemctl start myapp.servicesudo systemctl status myapp.service

五 质量保障与常见问题处理

  • 质量保障:在 CI/构建流程中强制执行 mvn testgradle test,确保测试通过后再打包与部署;必要时集成覆盖率与静态检查工具,提升交付质量。
  • 常见问题速查
    • 类路径问题:依赖未正确加入 -cp 或构建产物缺少依赖,检查构建配置与运行命令的类路径参数。
    • 包与目录不一致:存在 package 声明时,源码目录结构必须与包名一致;运行时使用完整类名(如 com.example.App)。
    • 环境变量问题:确认 JAVA_HOMEPATH 指向期望的 JDK,避免构建工具与命令行使用不同版本导致行为差异。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Java项目Ubuntu编译最佳实践
本文地址: https://pptw.com/jishu/751295.html
Ubuntu PHP-FPM如何设置工作进程 Java编译Ubuntu版本兼容性

游客 回复需填写必要信息