温馨提示×

Debian Java编译流程是怎样的

小樊
39
2025-12-24 20:30:04
栏目: 编程语言

Debian 上编译 Java 的两条主线

  • 主线一:编译你自己的 Java 应用(最常用)
  • 主线二:从源码构建 OpenJDK(JDK 开发场景)

主线一 编译 Java 应用

  • 安装 JDK 与构建工具
    • 安装默认 JDK:sudo apt update && sudo apt install default-jdk
    • 或指定版本(如 openjdk-11-jdk):sudo apt install openjdk-11-jdk
    • 验证安装:java -versionjavac -version
    • 安装构建工具:sudo apt install mavensudo apt install gradle
  • 获取源码
    • 示例:git clone https://github.com/your-repo/your-java-project.git
  • 使用构建工具编译与打包
    • Maven:在项目根目录执行 mvn clean package,产物通常在 target/ 目录
    • Gradle:在项目根目录执行 gradle build,产物通常在 build/libs/ 目录
  • 运行与常见产出
    • 运行可执行 JAR:java -jar target/your-app.jarjava -jar build/libs/your-app.jar
    • 可执行 Fat JAR(含依赖)
      • Maven 使用 maven-assembly-pluginmaven-shade-plugin
      • Gradle 使用 shadowJar 插件
  • 多版本 JDK 管理
    • 列出/切换版本:sudo update-alternatives --config java
    • 设置 JAVA_HOME(可选,例如在 ~/.bashrc 中):export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64export PATH=$JAVA_HOME/bin:$PATH;执行 source ~/.bashrc 生效

主线二 从源码构建 OpenJDK

  • 安装依赖
    • 基础工具:sudo apt-get update && sudo apt-get install build-essential git
    • 引导 JDK(Boot JDK):例如 sudo apt-get install openjdk-11-jdk-headless
  • 获取源码
    • 示例:git clone https://github.com/openjdk/jdk.git
  • 配置与编译(两种常见方式)
    • 方式 A(推荐,使用 autoconf 脚本)
      • 进入源码目录:cd jdk
      • 配置:bash configure
      • 编译:make images(或 make
      • 产物路径示例:build/linux-x86_64-normal-server-release/images/jdk
    • 方式 B(使用 GN/Ninja)
      • 创建构建目录:mkdir build && cd build
      • 配置:gn build -Djava_home=/usr/lib/jvm/java-11-openjdk-amd64 -Djavac_home=/usr/lib/jvm/java-11-openjdk-amd64
      • 编译:ninja -C out
  • 验证与安装
    • 验证产物:build/linux-x86_64-normal-server-release/images/jdk/bin/java -version
    • 安装(可选):sudo ninja -C out install
  • 提示
    • 构建过程耗时较长,建议使用多核并行(如 make -j$(nproc)
    • 具体配置与参数以所选 JDK 版本分支的官方文档为准

常见问题与排查要点

  • 版本不匹配
    • 源码所需 Java 版本 与已安装 JDK 版本 不一致会导致编译失败;请安装匹配的 Boot JDK 或切换 update-alternatives 版本
  • 环境变量未生效
    • 修改 ~/.bashrc/etc/profile 后执行 source 使其生效;确认 JAVA_HOME/binPATH 中靠前
  • 依赖缺失
    • 构建工具未安装或网络仓库不可达会导致 mvn/gradle 失败;检查 maven/gradle 是否可用、仓库配置是否正确
  • 产物路径与运行命令
    • 确认 target/build/libs/ 下是否存在可运行 JAR;使用 java -jar 启动时确保 Main-Class 已正确配置

0