Linux Docker下dotnet-sonarscanner end报错找不到java可执行文件
dotnet-sonarscanner 执行end阶段报找不到java可执行文件解决方案
优先排查系统Java环境配置问题
当前配置的JAVA_HOME路径大概率无效,按以下步骤验证修复:
- 先安装Sonar扫描端要求的Java版本(要求Java 11及以上,推荐Java 17),根据Docker镜像的基础系统选对应命令:
- Debian/Ubuntu系基础镜像:
apt update && apt install -y openjdk-17-jre-headless - Alpine基础镜像:
apk add --no-cache openjdk17-jre
- Debian/Ubuntu系基础镜像:
- 查找系统中java可执行文件的真实路径:
典型输出为update-alternatives --list java/usr/lib/jvm/java-17-openjdk-amd64/bin/java,去掉末尾的/bin/java就是正确的JAVA_HOME值。 - 重新配置环境变量,注意
JAVA_HOME不要带bin目录:export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH - 验证配置生效:执行
java -version能正常输出Java版本信息即可,此时重新运行sonarscanner end命令即可正常执行。
修复内置JRE权限问题(系统Java验证正常仍报错时操作)
全局dotnet tool安装的5.6.0版本dotnet-sonarscanner,内置的SonarScanner CLI自带JRE,路径存放在dotnet tool的存储目录下,按以下步骤找路径加权限:
- 用find命令定位内置的java可执行文件位置:
典型输出路径为:find /root/.dotnet/tools/.store/dotnet-sonarscanner -name "java" -type f/root/.dotnet/tools/.store/dotnet-sonarscanner/5.6.0/dotnet-sonarscanner/5.6.0/tools/net5.0/any/sonarscanner-4.7.0.2747/jre/bin/java - 给整个内置JRE目录递归加可执行权限,把路径替换成上一步查到的jre目录路径(即去掉末尾
/bin/java的部分):chmod -R +x /root/.dotnet/tools/.store/dotnet-sonarscanner/5.6.0/dotnet-sonarscanner/5.6.0/tools/net5.0/any/sonarscanner-4.7.0.2747/jre/ - 重新执行扫描命令即可。
注意事项
- 不要用Java 8运行高版本dotnet-sonarscanner,会出现兼容性报错
- Alpine镜像不要直接装通用版OpenJDK,必须用apk源里适配musl libc的openjdk包,否则java会无法执行
- 环境变量配置完可以用
echo $JAVA_HOME和which java二次确认路径正确
内容的提问来源于stack exchange,提问作者user892077
相关产品推荐
相关产品推荐

