无网络环境下GitLab流水线ant构建切换JDK17的解决方案咨询
解决方案
方案1:将系统默认Java版本切换为JDK17
你之前的操作没有生效是因为没有将JDK17加入update-alternatives的备选列表,且CI场景下非交互shell不会加载/etc/profile、.bashrc等配置文件,写入这些文件的环境变量不会生效。按以下步骤操作即可:
- 首先将JDK17的java、javac命令加入备选列表,设置优先级高于默认的JDK11(默认JDK11优先级通常为1000,设为1001即可自动成为默认)
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17/bin/java 1001 sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk-17/bin/javac 1001
- 非交互场景下直接指定默认版本,避免弹出选择菜单
sudo update-alternatives --set java /usr/lib/jvm/jdk-17/bin/java sudo update-alternatives --set javac /usr/lib/jvm/jdk-17/bin/javac
操作完成后执行java -version即可看到默认版本已经切换为JDK17。
方案2:无需修改全局配置,直接指定ant使用JDK17构建
该方案更适配CI流水线场景,无需修改系统全局配置,不会影响其他任务运行,有两种实现方式:
方式1:执行ant命令时临时指定环境变量
ant会优先读取当前shell的JAVA_HOME变量作为使用的JDK路径,直接在执行ant前指定变量即可:
# 注意将JDK17的bin目录放在PATH最前面,优先调用JDK17的命令 export JAVA_HOME=/usr/lib/jvm/jdk-17 export PATH=$JAVA_HOME/bin:$PATH ant [你的构建参数]
也可以合并为一行命令:
JAVA_HOME=/usr/lib/jvm/jdk-17 PATH=/usr/lib/jvm/jdk-17/bin:$PATH ant [你的构建参数]
方式2:在ant构建文件中指定JDK路径
如果可以修改项目的build.xml文件,在文件头部添加配置即可固定使用JDK17:
<property name="java.home" value="/usr/lib/jvm/jdk-17"/>
内容的提问来源于stack exchange,提问作者Alexandru DuDu
相关产品推荐
相关产品推荐

