这里有一个简单的问题。我想要在每次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插件来分析我的代码呢?
sonar-maven-plugin
插件。 - Stefan S.