2012-01-21 84 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>