Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在多模块项目中,当sonar分析绑定到maven生命周期时,如何使SonarQube模块只分析一次项目?_Java_Maven_Sonarqube_Cobertura_Static Code Analysis - Fatal编程技术网

Java 在多模块项目中,当sonar分析绑定到maven生命周期时,如何使SonarQube模块只分析一次项目?

Java 在多模块项目中,当sonar分析绑定到maven生命周期时,如何使SonarQube模块只分析一次项目?,java,maven,sonarqube,cobertura,static-code-analysis,Java,Maven,Sonarqube,Cobertura,Static Code Analysis,我试图实现的是将SonarQube分析集成到构建过程中,这样无论何时运行mvn clean install,都可以使用SonarQube分析代码。我们希望将其用于本地分析,也用于基于Jenkins的构建。如果发现新问题,那么构建应该失败(我们希望使用构建破坏插件)。通过这种方式,开发人员将知道,通过他的代码,他将引入新的问题,并且必须修复这些问题,以使构建工作正常 当我运行mvn sonar:sonar时,分析需要30秒,这是正常的 然而,当我试图将sonar目标绑定到maven构建阶段时,问题

我试图实现的是将SonarQube分析集成到构建过程中,这样无论何时运行
mvn clean install
,都可以使用SonarQube分析代码。我们希望将其用于本地分析,也用于基于Jenkins的构建。如果发现新问题,那么构建应该失败(我们希望使用构建破坏插件)。通过这种方式,开发人员将知道,通过他的代码,他将引入新的问题,并且必须修复这些问题,以使构建工作正常

当我运行mvn sonar:sonar时,分析需要30秒,这是正常的

然而,当我试图将
sonar
目标绑定到maven构建阶段时,问题就出现了。我将声纳绑定到验证阶段。构建现在需要5分钟,太长了。大约需要1分钟。构建本身,没有声纳分析需要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>
                <!-- 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>

jdbc:url
预览
真的
真的
声纳。主持人:9000
JAVA
假的
声纳%20way%20和%20Findbugs
破坏者
文件:*/target/**
发展
项目pom中的插件配置:

<!-- 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>
                <!-- 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>

org.codehaus.mojo
cobertura maven插件
包裹
科贝图拉
org.codehaus.mojo
声纳maven插件
2.5
验证
声纳

IMO,这只是一个Maven配置问题,您在执行
sonar:sonar
时缺少
false
元素:

                <!-- 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>

org.codehaus.mojo
声纳maven插件
2.5
验证
声纳
假的

谢谢您的回答!我试过了,这样声纳分析只运行一次。这里的问题是,在这种情况下,sonar在构建的一开始就运行,此时cobertura报告还不可用。相反,当所有子模块都已经构建好时,声纳分析最终运行是有意义的。我看到了两种解决方案,但我不喜欢其中任何一种。解决方案1:将一个新的子模块添加到父项目中,该子模块将在最后一天生成。声纳分析将仅从该子模块启动。这是令人困惑的,也不是很清楚。解决方案2:将命令mvnsonar:sonar放入某个脚本中,并作为构建后操作执行该脚本。这导致了可移植性问题,而且它也不优雅。您使用什么工具来触发构建?我们正在为CI使用quickbuild(从Jenkins移开)。但是,我们希望能够将此检查集成到本地构建中,而不仅仅是在本地构建中运行的检查。另一个可能有帮助的选项是使用单独的父级和聚合器POM。原因与Maven构建顺序有关,详细描述见。