温馨提示×

Java项目Ubuntu编译打包步骤

小樊
43
2025-11-30 17:44:00
栏目: 编程语言

Ubuntu下Java项目编译与打包步骤

一 准备环境

  • 安装 JDK(建议 OpenJDK 11 或更高版本):
    • 安装命令:sudo apt update && sudo apt install openjdk-11-jdk
    • 验证版本:java -versionjavac -version
  • 安装构建工具(二选一或都装):
    • Mavensudo apt install maven,验证:mvn -v
    • Gradlesudo apt install gradle,验证:gradle -v
  • 建议准备一个有入口类的项目结构(如使用 Maven 快速原型mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false)。

二 使用Maven打包

  • 在包含 pom.xml 的项目根目录执行:mvn clean package
    • 产物位置:target/xxx.jar
    • 常用插件与配置(设置源码/目标版本与主类,生成可执行 JAR):
      • 编译器插件:
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.1</version>
          <configuration>
            <source>11</source>
            <target>11</target>
          </configuration>
        </plugin>
        
      • 可执行 JAR(使用 maven-jar-plugin 指定主类):
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>3.2.0</version>
          <configuration>
            <archive>
              <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
                <mainClass>com.example.App</mainClass>
              </manifest>
            </archive>
          </configuration>
        </plugin>
        
      • 依赖外置(将依赖复制到 target/lib,与上面 manifest 的 classpathPrefix=lib/ 配合):
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>3.2.0</version>
          <executions>
            <execution>
              <id>copy-dependencies</id>
              <phase>package</phase>
              <goals><goal>copy-dependencies</goal></goals>
              <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
              </configuration>
            </execution>
          </executions>
        </plugin>
        
  • 运行:java -jar target/xxx.jar

三 使用Gradle打包

  • 在包含 build.gradle 的项目根目录执行:./gradlew clean build(或 gradle clean build
    • 产物位置:build/libs/xxx.jar
    • 基本配置(设置主类,生成可执行 JAR):
      plugins {
        id 'java'
        id 'application'
      }
      sourceCompatibility = '11'
      mainClassName = 'com.example.App'
      repositories { mavenCentral() }
      dependencies {
        testImplementation 'junit:junit:4.13.2'
      }
      jar {
        manifest { attributes 'Main-Class': mainClassName }
      }
      
    • 依赖外置(将运行时依赖复制到 build/libs/lib,便于与上层脚本配合):
      task copyDependencies(type: Copy) {
        from configurations.runtimeClasspath
        into 'build/libs/lib'
      }
      build.dependsOn copyDependencies
      
  • 运行:java -jar build/libs/xxx.jar

四 无构建工具与进阶打包

  • 手动编译与打包(适合学习或小项目)
    • 编译:javac -d out src/com/example/*.java
    • 创建 MANIFEST.MF(与 src 同级):
      Manifest-Version: 1.0
      Main-Class: com.example.App
      
    • 打包:jar cfm my-app.jar MANIFEST.MF -C out .
    • 运行:java -jar my-app.jar
  • 使用 jpackage 生成平台原生可执行安装包(JDK 14+
    • 示例:jpackage --type app-image --input target --name myapp --main-class com.example.App --output out
  • 使用 jlink 定制精简运行时(JDK 9+,适用于模块化项目)
    • 示例:jlink --module-path $JAVA_HOME/jmods:mods --add-modules java.base,java.logging,your.module.name --output custom-jre
  • 使用 Docker 打包发布
    • Dockerfile(多阶段示例,先构建再运行):
      FROM openjdk:11-jdk-slim AS builder
      WORKDIR /app
      COPY . .
      RUN ./gradlew build
      
      FROM openjdk:11-jre-slim
      WORKDIR /app
      COPY --from=builder /app/build/libs/app.jar /app/app.jar
      EXPOSE 8080
      CMD ["java","-jar","/app/app.jar"]
      
    • 构建与运行:docker build -t myapp .docker run -p 8080:8080 myapp

0