Sonar最新版本2.12集成了Jacoco插件,我想将它用于多模块项目的代码覆盖部分。
我有这样的结构
proj.com.parent
proj.com.provider
proj,com.test
提供者项目的测试用例位于测试项目中。当我将声纳中的代码覆盖率插件设置为jacoco时,它执行正常,但组合代码掩盖不会出现在DashBoard上。我看过一个帖子,单个jacoco.exec文件可以解决问题,但我无法这样做。
我尝试在下面的pom中配置以下内容
<profile>
<id>sonar</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<argLine>-javaagent:${sonar.jacoco.jar}=destfile=${sonar.jacoco.reportPath}</argLine>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<sonar.jacoco.reportPath>${basedir}/code-coverage/jacoco.exec</sonar.jacoco.reportPath>
<sonar.jacoco.jar> C:\sonar-2.12\war\sonar-server\deploy\plugins\jacoco\META-INF\lib\org.jacoco.agent-0.5.3.201107060350.jar</sonar.jacoco.jar>
</properties>
但是在maven命令行“mvn clean install”中我收到此错误:
在C:\ sonar-2.12 \ war \ sonar-server \ deploy \ plugins \ jacoco \ META-INF \ lib \ org.jacoco.agent-0.5.3.201107060350.jar中找不到Premain-Class清单属性失败 VM初始化期间发生错误 代理库无法初始化:仪器
任何人都可以提供任何帮助吗?
答案 0 :(得分:8)
你指向的jar不是使用winrar的jar ..extract,你会在里面得到另一个jar。叫做jacocoagent.jar。检查你是否得到了正确的jar只提取jacocoagent.jar 并查找manifest.mf,它应该有一个premain类的条目。
应该这样做。
答案 1 :(得分:2)
我遇到了同样的问题。看看Jacoco agent artifacts at the central repository.
有一个普通的jar工件,并且有一个带有分类器运行时的jar。您需要将“运行时”工件用作代理jar。我做的,我只需下载带有maven依赖插件的Jacoco代理运行时jar,如下所示:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>download-jacoco-agent</id>
<phase>pre-integration-test</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.agent</artifactId>
<version>0.6.3.201306030806</version>
<classifier>runtime</classifier>
<outputDirectory>${project.build.directory}</outputDirectory>
<destFileName>jacoco-agent.jar</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
然后您只需要定义以下命令行选项:
<argLine>-javaagent:${project.build.directory}/jacoco-agent.jar=destfile=${sonar.jacoco.reportPath}</argLine>
答案 2 :(得分:1)
也许您应该尝试将属性 sonar.core.codeCoveragePlugin 设置为值 jacoco 。 Sonar中的默认代码覆盖工具仍然是cobertura。请参阅code coverage上的以下doco。
如果这没有帮助,我找到了以下链接(从你想要的Maven运行Jacoco):