Gradle在Jenkins中构建JaCoCo jacocoTestReport时排除预先构建的jar和类

时间:2018-01-22 21:13:51

标签: java jenkins gradle jacoco

我有一个基于Gradle的项目构建。 现在我添加了很多单元测试,并尝试将其集成到Jenkins中以在构建项目时运行它们,并生成代码覆盖率报告(这是JaCoCo发挥作用的地方)。

我在build.gradle中有以下配置:

apply plugin: 'java'
apply plugin: 'application'
apply plugin: "jacoco"

buildDir "out"

repositories {
    maven {
        url "https://internal.corporate.repo.com/"
    }

    flatDir{
        dirs 'resources/lib'
    }

}

sourceSets {
    main {
        java {
            srcDir 'src/'
        }
        resources {
            srcDir 'resources/'
        }
    }
}

jacoco {
    toolVersion = "0.7.5.201505241946"
}

dependencies {
    compile 'org.apache.ant:ant-launcher:1.9.7'
    compile 'org.jdom:jdom:2.0.2'
    compile 'joda-time:joda-time:2.9.3'
    compile 'com.sun.mail:javax.mail:1.5.5'
    compile 'org.json:json:20160212'
    compile 'org.apache.wink:wink-client:1.4'
    compile 'org.apache.wink:wink-common:1.4'
    compile 'org.apache.wink:wink-json-provider:1.4'
    compile 'javax.ws.rs:javax.ws.rs-api:2.0.1' 
    compile 'org.apache.commons:commons-lang3:3.4'
    compile 'com.google.code.gson:gson:2.6.2'
    compile 'org.apache.ant:ant:1.9.7'
    compile 'org.slf4j:slf4j-api:1.7.25'
    compile 'org.apache.logging.log4j:log4j-api:2.9.0'
    compile 'org.apache.logging.log4j:log4j-core:2.9.0'
    compile 'org.apache.logging.log4j:log4j-slf4j-impl:2.9.1'
    compile 'javax.activation:activation:1.1.1'
    compile 'com.opencsv:opencsv:3.7'
    compile 'junit:junit:4+'
    compile name:'ant-soatest'  
    compile name:'ant-junit'
    compile 'commons-cli:commons-cli:1.3.1'
    compile 'org.apache.ant:ant-junit4:1.9.7'
    compile 'commons-io:commons-io:2.5'
    compile 'com.oracle.jdbc:ojdbc7:12.1.0.2'

    compile 'org.apache.commons:commons-configuration2:2.1.1'
    compile 'commons-beanutils:commons-beanutils:1.9.3'
    compile 'com.sun.jersey:jersey-client:1.8'
    compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.8.5'
    compile 'jaxen:jaxen:1.1.6'

}

 jacocoTestReport {
    reports {
        xml.enabled true
        csv.enabled true
        html.destination file("${buildDir}/jacocoHtml")
    }
}

test {
    jacoco {
        excludes = ['**/*.class']
    }
    testLogging.showStandardStreams = true 
 }

所以我有两个问题:

  1. 运行测试任务时,输出的test.exec显示0%的覆盖率,同时将其导入Eclipse中的Coverage选项卡。即使我知道测试已经运行,Gradle测试结果显示了3个成功的测试,这就是我第二次尝试实际获得覆盖结果的原因
  2. jacocoTestReport任务 - 这个当前最终会出现以下错误:
  3.   

    14:18:03.517 [错误]   [org.gradle.internal.buildevents.BuildExceptionReporter] at   org.gradle.internal.concurrent.StoppableExecutorImpl $ 1.run(StoppableExecutorImpl.java:46)   14:18:03.517 [错误]   [org.gradle.internal.buildevents.BuildExceptionReporter]引起::   创建报告时出错

    接下来是:

      

    14:18:03.520 [错误]   [org.gradle.internal.buildevents.BuildExceptionReporter]引起:   java.io.IOException:分析类时出错   /bld/workspace/some/DEV/really/long/obscure/pathname/appname/out/resources/main/testscripts/Cucumber/target/RenamedCommonDependencies.jar@oracle/jdbc/proxy/oracle$1jdbc$1replay$1driver$1NonTxnReplayableArray $ $ 2java $ 1sql $$$ 1Array Proxy.class。

    最后接着是:

      

    引起:java.lang.IllegalStateException:无法添加不同的类   同名:   甲骨文/ JDBC /代理/ ORACLE $ 1jdbc $ 1replay $ 1driver $ 1NonTxnReplayableArray $ 2java $ 1sql $ 1Array $$$代理   14:18:03.521 [错误]   [org.gradle.internal.buildevents.BuildExceptionReporter] at   org.jacoco.core.analysis.CoverageBuilder.visitCoverage(CoverageBuilder.java:106)

    我已经尝试了我能想到的一切,最后看Exclude package from jacoco code coverage for AndroidJaCoCo gradle plugin exclude 我尝试使用/bld/workspace/some/DEV/really/long/obscure/pathname/appname/out/resources/main/testscripts/Cucumber/target/RenamedCommonDependencies.jar但是同样的错误

    将排除路径更改为绝对路径

    请帮助..我浪费99%的开发时间来处理配置,只有1%编写代码...... :(

1 个答案:

答案 0 :(得分:0)

我认为任务设置不正确就像是

apply plugin: "application"
apply plugin: "jacoco"

mainClassName = "org.gradle.MyMain"

jacoco {
    applyTo run
}

task applicationCodeCoverageReport(type:JacocoReport){
    executionData run
    sourceSets sourceSets.main
}

在主要课程中,您放置了您的班级名称,导致您不需要所有系统库的代码覆盖率。 你可以在这里看到一个例子: https://github.com/codecov/example-gradle

示例和信息可以在这里找到: https://docs.gradle.org/current/userguide/jacoco_plugin.html#sec:configuring_the_jacoco_plugin

然而, 我认为你赌错了工具...... 查看http://pitest.org/