使用Java 11运行SonarScanner分析,使用Java 8运行目标代码

qltillow  于 2023-03-11  发布在  Java
关注(0)|答案(3)|浏览(478)

正如下面的声明所指出的,SonarSource终止了对运行11之前的Java版本的代码分析器的支持:
2021年1月-将分析移至Java 11
扫描仪环境中安装的Java版本必须在2021年2月1日之前至少升级到Java 11。Java 11之前的版本已弃用,使用这些版本的扫描仪将在该日期停止运行。
此外,2021年1月11日至2021年1月15日期间将实行限电,在此期间,使用Java版本低于11的扫描仪运行的首次分析将失败。为避免这种不便,您应在2021年1月11日前升级。
此处讨论的Java安装特指在SonarCloud扫描仪分析工具运行的环境中安装和使用的JDK或JRE。这可能是您的本地构建环境或CI服务。

这对项目代码所针对的Java版本没有任何影响。您仍然可以分析针对版本低于11的Java项目。

我试图搜索一个完整的例子关于如何运行一个比特桶管道来执行SonarScanner分析,使用java 11分析器,但目标代码使用java 11之前的版本(如java 8),但我无法找到一个。根据该图像,这应该是可能的。

jq6vz3qz

jq6vz3qz1#

我不知道是什么问题。公告中告知您必须使用Java 11+执行扫描,但您仍然可以使用Java〈11编译代码。您没有提供任何有关您项目的信息,因此我们以Maven项目为例。
它通常意味着你必须做这样的事情:

// set Java to 8
export JAVA_HOME=/path/to/jdk8/

// compile, test and build
mvn package

// set Java to 11
export JAVA_HOME=/path/to/jdk11/

// execute scanner
mvn sonar:sonar
t30tvxxf

t30tvxxf2#

虽然@agabrys提供了最直接的解决方案,也是我们使用的解决方案,尽管是通过Jenkins freestyle作业调用maven顶层目标包,然后结束注入JAVA_HOME变量并调用maven sonar步骤,但另一种方法是......
始终使用Java 11,但在maven pom中,请指定:

<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>

这是一个运行时不兼容的小风险,如该页底部所示。
另一种选择是将概要文件与maven toolchains结合使用,绑定到不同的概要文件,一个用于编译步骤,一个用于分析步骤。

vd8tlhqk

vd8tlhqk3#

我在我的项目中也遇到了同样的问题,我的项目需要jdk8来编译,但SonarScan需要jdk11,我必须使用maven的sonar:sonar插件,而不是直接的sonarscanner二进制文件。
为了解决这个问题,我使用了docker容器,只运行sonarscan部分,编译部分仍然是由主机的maven本身完成的。
要使用Docker运行SonarScan,请使用如下命令:

docker run -u $(id -u ${USER}):$(id -g ${USER}) --rm -v "$PWD":/usr/src/mymaven -v "$HOME/.m2":/tmp/.m2 -w /usr/src/mymaven maven:3-openjdk-11 \
         mvn -gs=/tmp/.m2/settings.xml -Dmaven.repo.local=/tmp/.m2/repository sonar:sonar \
        -Dsonar.dependencyCheck.jsonReportPath=target/dependency-check-report.json \
        -Dsonar.dependencyCheck.htmlReportPath=target/dependency-check-report.html \
        -Dsonar.dependencyCheck.summarize=true \
        -Dsonar.host.url=https://my-sonar-url \
        -Dsonar.login=****

相关问题