2014-01-20 91 views
0

我是maven的新手,我們的項目有幾個模塊。我的目標是爲整個項目(包含所有模塊)生成一份覆蓋率報告。下面是根據項目的pom.xml所有模塊的EMMA代碼覆蓋

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>1.0.0</modelVersion> 
<groupId>com.xx.test</groupId> 
<artifactId>test</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>pom</packaging> 
<name>test</name> 

<modules> 
    <module>module1</module> 
    <module>module2</module> 
    <module>module3</module> 
    <module>module4</module> 
    <module>module5</module>   
</modules> 

<build> 
    . 
    . 
    . 

</build> 
<reporting> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>emma-maven-plugin</artifactId> 
      <version>1.0-alpha-3</version> 
     </plugin> 
    </plugins> 
</reporting> 
</project> 

正如你看到的上面,我添加了艾瑪的插件並執行以下我們的粗略框架:MVN艾瑪:艾瑪 這產生了對下每個模塊的各個覆蓋率報告該目標稱爲「目標」。有沒有辦法將所有這些報告合併到一個報告中? 任何指針..?

回答

1

以下是獲得所需結果

  1. 添加JaCoCo插件父pom.xml的,因此所有的項目可以生成一個覆蓋報告的做法。

  2. 爲追加Jacoco插件的所有結果創建新的模塊'coverage'...這只是一次性的事情。

  3. 在這個新模塊的pom.xml中,插入所需的插件加入所有覆蓋信息 a。由於JaCoCo報告插件要求您設置構建目錄,類目錄,源目錄或生成源目錄的位置,因此定義所有類,源,生成源等的所有屬性。我們正在使用Maven的ANT任務。 JaCoCo Ant任務將合併來自多個JaCoCo文件結果導致

  4. 現在從父pom.xml中運行命令:mvn全新安裝

  5. 如果模塊有任何測試的情況下,將爲該模塊產生「jacoco.exec」文件(此文件具有報告所需的全部覆蓋範圍信息),此時還會生成單個模塊代碼覆蓋率報告(位於\ target \ site \ jacoco下)
  6. 並最終從「coverage」pom.xml運行: mvn乾淨安裝 a。這將在maven中運行ANT報告任務,該任務將抓取所有模塊生成的所有「jacoco.exec」文件,合併結果並生成報告。 下面是行家可以

    <?xml version="1.0" encoding="UTF-8" ?> 
    <project name="maven-antrun-" default="main" > 
    <target name="main"> 
    <echo message="Generating JaCoCo Reports"/> 
    <taskdef name="report" classname="org.jacoco.ant.ReportTask"> 
    <classpath path="./target/jacoco-jars/org.jacoco.ant.jar"/> 
    </taskdef> 
    <mkdir dir="./target/coverage-report"/> 
    <report> 
    <executiondata> 
        <fileset dir="../module1/target"> 
        <include name="jacoco.exec"/> 
        </fileset> 
        <fileset dir="../module2/target"> 
        <include name="jacoco.exec"/> 
        </fileset> 
    
    </executiondata> 
    <structure name="Project Code Coverage"> 
        <group name="project"> 
        <classfiles> 
         <fileset dir="../module1/target/classes"/> 
         <fileset dir="../module2/target/classes"/> 
    
        </classfiles> 
        <sourcefiles encoding="UTF-8"> 
         <fileset dir="../module1/src/main/java"/> 
         <fileset dir="../module2/src/main/java"/>   
        </sourcefiles> 
        </group> 
    </structure> 
    <html destdir="./target/coverage-report/html"/> 
    <xml destfile="./target/coverage-report/coverage-report.xml"/> 
    <csv destfile="./target/coverage-report/coverage-report.csv"/> 
    </report> 
    </target> 
    </project> 
    
0

內運行Ant報告目標有什麼辦法能在螞蟻報告任務多個子模塊做到這一點一般?指定確切的目錄工作正常,但不是** dirset引用。該工程確定:

<classfiles> 
    <dirset dir="${basedir}"> 
     <include name="module1/target/classes"/> 
     <include name="module2/target/classes"/> 

OR

<dirset dir=""> 
    <include name="module1/target/classes"/> 
    <include name="module2/target/classes"/> 

OR

<dirset dir="" includes="module1/target/classes,module2/target/classes"/> 

這些不工作(0類,或沒有進一步的細節 '建立出錯報告'):

<dirset dir=""> 
    <include name="**/target/classes"/> 

<dirset dir="${basedir}"> 
    <include name="**/target/classes"/> 

OR

<dirset dir="" includes="**/target/classes"/> 

OR

<dirset dir="${basedir}" includes="**/target/classes"/> 

有趣的是,的資源文件**引用產生的HTML源鏈接OK,我想它的工作完全一樣的類文件:

<sourcefiles> 
    <dirset dir="" includes="**/src/main/java"/> 

這不起作用:

<sourcefiles> 
    <dirset dir="${basedir}" includes="**/src/main/java"/>