【问题标题】:How To Use The Sonar Maven Plug-in如何使用 Sonar Maven 插件
【发布时间】:2017-05-11 13:17:39
【问题描述】:

这里是简单的问题。我想添加要在每个 Maven 构建上执行的声纳。我试过了:

<plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.1.1</version>
</plugin>

<plugin>
    <groupId>org.codehaus.sonar</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>5.1</version>
</plugin>

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>2.7.1</version>
</plugin>

因为 a) 我无法弄清楚插件的作用和/或 b) 哪个是当前插件。

如果我只将上述内容添加到&lt;build&gt; -> &lt;plugins&gt; 它永远不会执行(因此插件没有默认执行)。所以当然我添加了一条&lt;execution&gt; 指令,然后Sonar 被执行,但出现以下错误消息:

<executions>
    <execution>
        <phase>prepare-package</phase>
        <goals>
            <goal>sonar</goal>
        </goals>
    </execution>
</executions>

无法在项目 org.acme.project.build 上执行目标 org.sonarsource.scanner.maven:sonar-maven-plugin:3.1.1:sonar(默认):无法执行 Findbugs:该项目包含 Java 源文件未编译的。

我使用哪个阶段似乎并不重要(我尝试了 validatecompiletestprepare-packagepackage 尽管并非所有这些都有意义)。我确信项目中的任何地方都没有源代码生成。静态类编译得很好。

我认为问题可能是每个模块都执行了插件,包括父 pom 项目。这很奇怪,因为sonar:sonar 跳过了那个项目。

但是项目结构很简单,我也找不到什么不寻常的地方:

<groupId>group</groupId>
<artifactId>org.acme.project.build</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
    <module>org.acme.project</module>
</modules>

<profiles>
    <profile>
        <id>sonar</id>
        <properties>
            <sonar.host.url>http://sonar.acme.org/</sonar.host.url>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.sonarsource.scanner.maven</groupId>
                    <artifactId>sonar-maven-plugin</artifactId>
                    <version>3.1.1</version>
                    <executions>
                        <execution>
                            <phase>compile</phase>
                            <goals>
                                <goal>sonar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

项目org.acme.project 除了它自己的工件ID 和父项之外什么都没有。命令行为:mvn clean deploy -Dsonar.login=Wile.Coyote -Dsonar.password=*********** -Psonar

日志显示声纳总是在安装阶段之前执行,当然这还为时过早。

那么如何使用 Sonar 的 Maven 插件来分析我的代码呢?

【问题讨论】:

  • 你得到的错误是哪个插件?
  • @nullpointer 与sonar-maven-plugin.
  • 我的意思是使用来自哪个 groupId 的 sonar-maven-plugin?你是同时使用这三个吗?
  • @nullpointer 抱歉,来自org.sonarsource.scanner.maven。我也添加了这个问题。
  • # 在某些情况下,您可能希望将 sonar:sonar 目标作为专用步骤运行。确保使用 install 作为多模块项目的第一步mvn clean install mvn sonar:sonar

标签: maven sonarqube-scan


【解决方案1】:

a) 我不知道这些插件是做什么的

该插件用于从代码覆盖率报告和存储库代码扫描中收集详细信息,以分析可能的错误、重复等。您可以搜索示例声纳报告以查找所有内容和如何使用 maven 使用 settings.xmlmaven plugin 等两种方法获取这些详细信息,详见 SonarQube Scanner for MavenSonarQube - analyzing with Maven

b) 哪一个是当前的。

maven central 建议将来自org.codehaus.mojo 的当前插件用作

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.2</version>
</plugin>

已移至

<plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.2</version>
</plugin>

因此,理想情况下,您应该使用 groupId 中的一个 - org.sonarsource.scanner.maven,正如 SonarQube Docs 所建议的那样

还有来自org.codehaus.sonar 版本5.1 的工件似乎已过时且未维护。

【讨论】:

  • 幸运的猜测,但我在大部分测试中都使用了该插件。还是有上面的错误信息。我现在认为问题出在父 pom 上。或者问题可能出在迫使我手动添加 &lt;execution&gt; 标记的任何原因上,因为没有它它就无法工作。
猜你喜欢
  • 1970-01-01
  • 2013-05-05
  • 2013-10-03
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 2012-05-06
  • 2011-05-18
  • 2023-03-18
相关资源
最近更新 更多