如何使用Sonar Maven插件

3

这里有一个简单的问题。我想要在每次Maven构建中执行Sonar。我尝试了以下操作:

<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)哪个是当前的插件。
如果我只将以上内容添加到 <build> -> <plugins>,它从来没有被执行过(因此插件没有默认执行)。当然,我添加了一个 <execution> 指令,在那之后 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源代码文件。无论我使用哪个阶段(我尝试过validate、compile、test、prepare-package和package,尽管并不是所有阶段都有意义),似乎都没有关系。我确定项目中没有任何源代码生成。静态类编译得很好。我认为问题可能在于插件针对每个模块都会被执行,包括父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除了自己的artifact ID和parent之外,没有其他内容。命令行是:mvn clean deploy -Dsonar.login=Wile.Coyote -Dsonar.password=*********** -Psonar

日志显示Sonar总是在安装阶段之前执行,这显然太早了。

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


你得到的错误是哪个插件引起的? - Naman
@nullpointer 使用 sonar-maven-plugin 插件。 - Stefan S.
我是指使用哪个groupId的sonar-maven-plugin?你是同时使用这三个吗? - Naman
@nullpointer 我添加了那个信息,虽然它非常琐碎,但我看不出有什么问题。 - Stefan S.
@hawkeye 不,我们必须使用“sonar:sonar”手动触发每个构建的Sonar。 - Stefan S.
显示剩余6条评论
1个回答

2
a) 我无法理解插件的作用。 这个插件用于收集代码覆盖率报告和仓库代码扫描的详细信息,以分析可能存在的错误、重复等问题。您可以搜索一个“样本Sonar报告”,了解如何使用两种方法(如settings.xmlmaven plugin)来获取这些细节。详情请参见SonarQube Scanner for MavenSonarQube - analyzing with Maven
b) 哪一个是当前版本。 Maven中央建议使用来自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文档中建议的那样。
此外,org.codehaus.sonar版本5.1的工具似乎已经过时且不再维护。

幸运的猜测,但是那个插件是我大部分测试所使用的。不过仍然出现了以上错误消息。我现在认为问题在于父POM。或者问题可能出现在强制我手动添加<execution>标签的任何东西上,因为如果没有它就无法正常工作。 - Stefan S.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接