【问题标题】:Integrating SonarQube with Maven reusing Findbugs, PMD, Checkstyle, Surefire and Jacoco reports将 SonarQube 与 Maven 集成,重用 Findbugs、PMD、Checkstyle、Surefire 和 Jacoco 报告
【发布时间】:2015-04-27 13:14:22
【问题描述】:

我有一个多模块 Java Maven 项目,它已经使用 Findbugs、Checkstyle、PMD 和 Jacoco 来检查代码。在这些分析过程中也会运行测试。我现在想设置 SonarQube 以收集 Maven 运行生成的报告并将它们显示在 SonarQube 的仪表板中。到目前为止,我在我的父 pom.xml 中有这些属性,我在互联网上的各种帖子中找到了这些属性:

<properties>
    <sonar.dynamicAnalysis>reuseReports</sonar.dynamicAnalysis>
    <sonar.surefire.reportsPath>${project.parent.build.directory}/surefire-reports</sonar.surefire.reportsPath>
    <sonar.jacoco.reportPath>${project.parent.build.directory}/coverage-reports/${project.artifactId}-jacoco.exec</sonar.jacoco.reportPath>
    <sonar.findbugs.reportPath>${project.parent.build.directory}/findbugs/findbugs.xml</sonar.findbugs.reportPath>
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
</properties>

我没有更改 Checkstyle、Findbugs、Jacoco 或 PMD 插件配置。我在 Surefire 插件配置中添加了几行:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire-plugin.version}</version>
                <configuration>
                    <skip>${skip.test}</skip>
                    <testFailureIgnore>${testFailureIgnore}</testFailureIgnore>
                    <argLine>${surefireArgLine}</argLine>
                    <failIfNoTests>${failIfNoTests}</failIfNoTests>
                    <test>AllTests</test>
                    <properties>
                        <property>
                            <name>listener</name>
                            <value>org.sonar.java.jacoco.JUnitListener</value>
                        </property>
                    </properties>
                </configuration>
            </plugin>

这些是声纳插件:

            <plugin>
                <groupId>org.codehaus.sonar-plugins.java</groupId>
                <artifactId>sonar-jacoco-listeners</artifactId>
                <version>${sonar-jacoco-listeners.version}</version>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
                <version>${sonar-maven-plugin.version}</version>
            </plugin>

运行此程序时,我收到消息“'sonar.dynamicAnalysis' 自 4.3 版以来已弃用,不应再使用。”但我不确定还能使用什么。相关的 JIRA 问题也没有这样说 (https://jira.codehaus.org/browse/SONAR-5185) 此外,Sonar 似乎并没有从我的 Maven 运行中获得任何东西。仪表板仅显示“代码行”、“重复”、“复杂性”、“目录纠结索引”和“单元测试成功”的值。从最后一个条目来看,至少单元测试的结果被提取了。

我正在使用 Maven 3.2.2、sonar-jacoco-listeners 2.9.1、sonar-maven-plugin 2.5 和 SonarQube 4.5.1。使用“mvn -e test”在 Jenkins 作业中运行测试。

任何指针或帮助将不胜感激。也许我想要实现的目标根本不可能和/或不可行。

(回答 user944849 的评论) 这是一个模块构建的声纳输出。

[INFO] [13:39:34.821] -------------  Scan Administration
[INFO] [13:39:34.822] Load module settings
[INFO] [13:39:34.869] Configure Maven plugins
[INFO] [13:39:34.871] Compare to previous analysis (2015-02-25)
[INFO] [13:39:34.872] Compare over 30 days (2015-01-26, analysis of 2015-01-26 05:14:41.328)
[INFO] [13:39:34.873] Compare to previous version (2015-01-16)
[INFO] [13:39:34.874] No quality gate is configured.
[INFO] [13:39:34.889] Initializer FindbugsMavenInitializer...
[INFO] [13:39:34.889] Initializer FindbugsMavenInitializer done: 0 ms
[INFO] [13:39:34.889] Base dir: /mnt/jenkins/jobs/nightlybuild_UVDS_BTH/workspace/trunk/admin
[INFO] [13:39:34.889] Working dir: /mnt/jenkins/jobs/nightlybuild_UVDS_BTH/workspace/trunk/admin/target/sonar
[INFO] [13:39:34.889] Source paths: pom.xml, src/main/java
[INFO] [13:39:34.890] Test paths: src/test/java
[INFO] [13:39:34.890] Binary dirs: target/classes
[INFO] [13:39:34.890] Source encoding: UTF-8, default locale: de_DE
[INFO] [13:39:34.890] Index files
[INFO] [13:39:35.112] 544 files indexed
[INFO] [13:39:42.216] Quality profile for java: DEFAULT
[INFO] [13:39:42.276] Sensor JavaSquidSensor...
[INFO] [13:39:42.303] Java Main Files AST scan...
[INFO] [13:39:42.303] 407 source files to be analyzed
[INFO] [13:39:52.304] 245/407 files analyzed
[INFO] [13:39:58.548] 407/407 source files analyzed
[INFO] [13:39:58.549] Java Main Files AST scan done: 16246 ms
[INFO] [13:39:58.566] Java bytecode scan...
[INFO] [13:39:58.895] Java bytecode scan done: 329 ms
[INFO] [13:39:58.896] Java Test Files AST scan...
[INFO] [13:39:58.896] 137 source files to be analyzed
[INFO] [13:39:59.676] Java Test Files AST scan done: 780 ms
[INFO] [13:39:59.676] 137/137 source files analyzed
[INFO] [13:39:59.677] Package design analysis...
[INFO] [13:40:00.767] Package design analysis done: 1090 ms
[INFO] [13:40:00.788] Sensor JavaSquidSensor done: 18512 ms
[INFO] [13:40:00.796] Sensor QProfileSensor...
[INFO] [13:40:00.797] Sensor QProfileSensor done: 1 ms
[INFO] [13:40:00.797] Sensor InitialOpenIssuesSensor...
[INFO] [13:40:00.839] Sensor InitialOpenIssuesSensor done: 42 ms
[INFO] [13:40:00.839] Sensor ProjectLinksSensor...
[INFO] [13:40:00.843] Sensor ProjectLinksSensor done: 4 ms
[INFO] [13:40:00.843] Sensor VersionEventsSensor...
[INFO] [13:40:00.850] Sensor VersionEventsSensor done: 7 ms
[INFO] [13:40:00.850] Sensor FileHashSensor...
[INFO] [13:40:00.863] Sensor FileHashSensor done: 13 ms
[INFO] [13:40:00.863] Sensor SurefireSensor...
[INFO] [13:40:00.863] parsing /mnt/jenkins/jobs/nightlybuild_UVDS_BTH/workspace/trunk/uvds-admin/target/surefire-reports
[INFO] [13:40:00.920] Sensor SurefireSensor done: 57 ms
[INFO] [13:40:00.921] Sensor Maven dependencies...
[INFO] [13:40:01.086] Sensor Maven dependencies done: 165 ms
[INFO] [13:40:01.090] Sensor CPD Sensor (wrapped)...
[INFO] [13:40:01.090] JavaCpdEngine is used for java
[INFO] [13:40:01.101] Cross-project analysis disabled
[INFO] [13:40:02.295] Sensor CPD Sensor (wrapped) done: 1205 ms
[INFO] [13:40:02.432] Execute decorators...

【问题讨论】:

  • 报告是否存在于配置的位置?此外,您是否检查了构建的 Jenkins 控制台输出以查看 SonarQube 在做什么?它可能有关于在配置的目录中找不到文件,或者文件格式错误等消息。

标签: maven sonarqube checkstyle findbugs jacoco


【解决方案1】:

这是一个 POM,其中配置了适用于我的 SonarQube 4.5.1,至少适用于 Surefire 和 JaCoCo(请参阅 results)。

项目使用mvn clean install -Dsonar 运行。

我没有在我的项目中使用 FindBugs..

【讨论】:

    【解决方案2】:

    感谢您的回答。声纳现在拾取代码覆盖率。问题是我为 Jacoco exec 文件提供的路径。我使用了变量 parent.project.build.directory。这没有用。我现在将 exec 文件存储在项目的构建目录中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-11
      • 2017-07-30
      • 2015-03-02
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多