Gitlab CI下ant.java.version为11如何切换Java17构建项目
Gitlab CI Ant构建切换Java17解决方案
之前的配置失效原因:仅修改build.xml的编译参数不会改变Ant运行时依赖的JDK版本,Ant默认会读取系统默认JDK作为运行版本;adoptopenjdk安装报错是因为AdoptOpenJDK项目已经迁移至Eclipse Temurin,默认系统源没有对应软件包。
方案1:使用预配JDK17的CI镜像(推荐)
直接使用官方维护的JDK17基础镜像,无需手动配置JDK环境,避免软件源相关问题。示例.gitlab-ci.yml配置如下:
stages: - build ant-build-java17: stage: build # 官方JDK17镜像,自带完整Java17环境 image: eclipse-temurin:17-jdk before_script: # 仅需安装Ant即可 - apt update && apt install -y --no-install-recommends ant script: # 验证版本,确认ant使用的是Java17 - java -version - ant -diagnostics | grep ant.java.version # 执行你的构建命令 - ant build
方案2:基于原有镜像手动安装配置JDK17
如果必须使用指定的基础镜像,按照以下步骤配置安装Temurin 17(原AdoptOpenJDK):
步骤1:配置软件源并安装JDK17
在.gitlab-ci.yml的before_script中添加以下配置:
before_script: # 安装源配置依赖 - apt update && apt install -y --no-install-recommends ca-certificates curl gnupg # 导入Temurin源GPG密钥 - curl -fsSL https://packages.adoptium.net/artifactory/api/gpg/key/public | gpg --dearmor -o /usr/share/keyrings/adoptium-archive-keyring.gpg # 添加Temurin软件源 - echo "deb [signed-by=/usr/share/keyrings/adoptium-archive-keyring.gpg] https://packages.adoptium.net/artifactory/deb $(awk -F= '/^VERSION_CODENAME/{print$2}' /etc/os-release) main" | tee /etc/apt/sources.list.d/adoptium.list # 安装JDK17和Ant - apt update && apt install -y --no-install-recommends temurin-17-jdk ant # 配置系统默认Java和Javac为17版本 - update-alternatives --set java /usr/lib/jvm/temurin-17-jdk-*/bin/java - update-alternatives --set javac /usr/lib/jvm/temurin-17-jdk-*/bin/javac # 配置JAVA_HOME环境变量,确保Ant识别到JDK17 - export JAVA_HOME=/usr/lib/jvm/temurin-17-jdk-*
步骤2:Shell执行器特殊配置
如果你的Gitlab Runner使用Shell执行器,直接在Runner所在的虚拟机上执行上述安装和配置命令一次即可永久生效,无需每次CI任务重复安装。
build.xml适配配置
保留你之前添加的编译参数即可,Ant运行在JDK17环境下会自动适配:
<javac source="17" target="17" /> <property name="ant.build.javac.target" value="17" />
如果仍然出现版本不匹配问题,执行构建命令时手动指定JAVA_HOME:JAVA_HOME=/usr/lib/jvm/temurin-17-jdk-* ant build
内容的提问来源于stack exchange,提问作者Alexandru DuDu
相关产品推荐
相关产品推荐

