gpt4 book ai didi

java - 多模块项目中,sonar分析绑定(bind)maven生命周期,如何让SonarQube模块只分析一次项目?

转载 作者:搜寻专家 更新时间:2023-11-01 00:56:09 26 4
gpt4 key购买 nike

我想要实现的是将 SonarQube 分析集成到构建过程中,以便无论何时运行 mvn clean install,都会使用 SonarQube 分析代码。我们想将它用于本地分析,也用于在 Jenkins 上构建。如果发现新问题,那么构建应该会失败(我们想为此使用构建断路器插件)。这样开发人员就会知道他的代码将引入新问题,并且必须修复这些问题才能使构建工作。

当我运行 mvn sonar:sonar 时,分析需要 30 秒,这没问题。

但是,当我尝试将 sonar 目标绑定(bind)到 Maven 构建阶段时,问题就出现了。我将 sonar 绑定(bind)到 verify 阶段。构建现在需要 5 分钟,这太长了。大约需要 1 分钟。在没有 SonarQube 分析的情况下,构建本身需要 30 秒。

注意(可能有助于找出问题所在):运行构建的项目中有多个模块,我想这就是问题所在。看起来 sonar:sonar 目标被执行了多次,每个子模块执行一次,整个 项目被多次分析(不仅是子模块)。因此,我们有 4 个子模块,报告在构建期间生成了 5 次。

相反,我们只想分析整个项目一次,而不是 5 次。在为所有模块生成 cobertura 报告之后,在构建结束时运行此 1 分析也很重要。

那么,我如何将 SonarQube 分析集成到构建中,以便它只分析我的多模块项目一次,最后,在为所有子模块生成 cobertura 报告之后?

父 pom 中的 SonarQube 插件属性:

<!-- Sonar plugin properties -->
<sonar.jdbc.url>jdbc:url</sonar.jdbc.url>
<sonar.analysis.mode>preview</sonar.analysis.mode>
<sonar.issuesReport.html.enable>true</sonar.issuesReport.html.enable>
<sonar.issuesReport.console.enable>true</sonar.issuesReport.console.enable>
<sonar.host.url>sonar.host:9000</sonar.host.url>
<sonar.language>java</sonar.language>
<sonar.buildbreaker.skip>false</sonar.buildbreaker.skip>
<sonar.qualitygate>Sonar%20way%20with%20Findbugs</sonar.qualitygate>
<sonar.preview.includePlugins>buildbreaker</sonar.preview.includePlugins>
<sonar.exclusions>file:**/target/**</sonar.exclusions>
<branch>development</branch>

项目pom中的插件配置:

                <!-- Run cobertura analysis during package phase -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>cobertura</goal>
</goals>
</execution>
</executions>
</plugin>

<!-- Run sonar analysis (preview mode) during verify phase. Cobertura reports need to be generated already -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>sonar</goal>
</goals>
</execution>
</executions>
</plugin>

最佳答案

IMO,这只是一个 Maven 配置问题,您缺少 <inherited>false</inherited>关于执行 sonar:sonar 的元素:

                <!-- Run sonar analysis (preview mode) during verify phase. Cobertura reports need to be generated already -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.5</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>sonar</goal>
</goals>
<inherited>false</inherited>
</execution>
</executions>
</plugin>

关于java - 多模块项目中,sonar分析绑定(bind)maven生命周期,如何让SonarQube模块只分析一次项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29099614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com