2012-01-21 34 views
2

Sonar最新版本2.12集成了Jacoco插件,我想将它用于多模块项目的代码覆盖部分。为sonar2.12配置jacoco代理(多模块maven)

我有这样

proj.com.parent 
    proj.com.provider 
    proj,com.test 

测试用例的供应商项目都在测试项目的结构。当我将声音中的代码覆盖率插件设置为jacoco时,它的执行效果很好,但组合代码covergae不会显示在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> 

但在行家命令行“MVN干净安装”我得到这个错误:

无法找到Premain-class清单属性在C:\ sonar-2.12 \ war \ sonar-server \ deploy \ plugins \ jacoco \ META-INF \ lib \ org.jacoco.agent-0.5.3.201107060350.jar VM 代理库无法初始化:仪器

任何人都可以提供任何帮助吗?

回答

1

也许你应该尝试的财产sonar.core.codeCoveragePlugin的值设置为jacoco。 Sonar中的默认代码覆盖工具仍然是cobertura。请参阅code coverage上的以下doco。

如果这样做没有帮助,我发现下面的链接(运行Jacoco从Maven作为你试图做):

+0

是马克,我去了在你提供的链接上,实际上我从同一个网站获得了详细信息。但我不知道他们使用了哪个版本的SONAR,我的问题是运行时抛出的错误,我不确定究竟是什么原因。 – fxviking

7

你指着罐子是不是该jar ...提取使用winrar,你会得到另一个jar里面。叫做jacocoagent.jar。检查你是否有正确的jar提取jacocoagent.jar 并寻找manifest.mf,它应该有一个premain类的入口。

应该做的。

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>