Jenkins Pipeline指定JDK版本后仍使用系统Java8问题求助
问题根因
- PATH优先级低于系统预装JDK:Jenkins的
tools指令只会自动设置JAVA_HOME环境变量,不会主动将对应JDK的bin目录添加到PATH的最前列,系统预装的Java 8路径在PATH中优先级更高,因此直接调用java命令时默认找到的是Java 8版本。 - JDK路径配置错误导致Maven校验失败:Maven启动时会校验
$JAVA_HOME/bin/java文件是否存在,如果不存在就会抛出「JAVA_HOME应该指向JDK而非JRE」的错误,出现这个报错说明你配置的JAVA_HOME路径下没有对应的JDK可执行文件,大概率是全局工具配置中JDK的「子目录」参数填写错误,或者JDK压缩包解压不完整。 - 你当前测试用的
echo $JAVA_HOME$命令多写了末尾的$符号,输出的路径末尾多出来的$是你额外加的字符,会干扰你判断JAVA_HOME的真实值。
解决方案
- 先在执行构建命令前手动将JDK的bin目录添加到PATH最前面,保证调用到的是指定版本的JDK
- 验证
JAVA_HOME路径的有效性,确认路径下存在bin/java可执行文件 - 核对全局工具配置中JDK的子目录参数,和压缩包解压后的根目录名称保持一致,你下载的JDK压缩包解压后默认根目录为
jdk-11.0.13+8,如果之前填的子目录和这个不一致需要修正。
修正后的Pipeline参考
pipeline { agent any tools { jdk 'AdoptOpenJDK11' maven 'Maven_3_8_1' } stages { stage('Build') { steps { sh 'echo $JAVA_HOME' // 把JDK的bin目录加到PATH最前面 sh 'export PATH=$JAVA_HOME/bin:$PATH' // 验证Java版本 sh 'java -version' // 验证路径是否正确 sh 'ls -la $JAVA_HOME/bin/java' sh 'mvn -B -DskipTests clean package' } } } }
内容的提问来源于stack exchange,提问作者Andy Dufresne
相关产品推荐
相关产品推荐

