簡體   English   中英

排除不適用於 Jacoco Gradle 插件

[英]Exclusions not working with Jacoco Gradle plugin

我正在為我的項目設置 Jacoco Gradle 插件。 該插件運行良好並生成覆蓋率報告,但它不排除我會排除的包。

我想包含的類在 com/xxx/ws/hn/** 中,我想排除的類在 com/xxx/ws/enterprise/** 中。

這是我的 Gradle 腳本:

apply plugin: "jacoco"

jacoco {
    toolVersion = "0.6.2.201302030002"
    reportsDir = file("$buildDir/reports/jacoco")
}

test {
    jacoco{
        excludes = ["com/xx/ws/enterprise/**/*"]
        includes = ["com/xxx/ws/hn/**/*"]
        append = false
    }
}

jacocoTestReport {
    dependsOn test
    description = "Generate Jacoco coverage reports after running tests."
    executionData = files('build/jacoco/test.exec')
    reports {
        xml.enabled true
        html.enabled true
    }
}

我在這里錯過了什么嗎? 我嘗試了各種排除模式,包括“。” 包的分隔符而不是“/”,但似乎沒有任何作用。 任何幫助將不勝感激。

我尚未驗證這一點,但是當我閱讀 JaCoCo 文檔時,它指出可以使用通配符,但所有示例只有一個 *,而不是您的示例所示的兩個。

http://www.eclemma.org/jacoco/trunk/doc/agent.html

為了鞏固(並驗證)Joachim 的答案,我看到了這篇 SO 帖子,發現使用單個通配符指定規范類名、類路徑樣式(帶斜杠,而不是句點)實際上效果很好。 例如,這是在我的構建中使用的排除列表,定義為單獨的 gradle 文件中的列表:

def testExcl = [
    'android/*',
    'com/android/*',
    'com/nativelibs4java/*',
    'com/ochafik/*',
    'com/fasterxml/*',
    'com/esotericsoftware/*',
    'com/google/*',
    'com/lmax/*',
    'com/sun/*',
    'jdk/*',
    'mockit/*',
    'org/apache/*',
    'org/bridj/*',
    'org/gradle/*',
    'org/hamcrest/*',
    'org/junit/*',
    'org/slf4j/*',
    'sun/*',
    'worker/*',
    '*Test',
    '*TestIntegration',
    '*AllTests',
    '*Suite'
]

我嘗試了大約 10 或 12 種其他方式來格式化類名,這是唯一有效的方式。 我不知道為什么像這樣簡單/基本的東西如此難以搜索,並且很難在 Gradle 的上下文中找到明確的答案(即在 JaCoCo 的官方文檔之外,其中沒有關於 Gradle 集成的文檔,但是 Ant 和 Maven集成文檔在那里)。

如果其他人試圖讓 JaCoCo 排除類,希望這會有所幫助。

更新:這在 Gradle 7 中發生了變化(我從 5.6.1 到 7.1.1,所以不確定 Gradle 6)並且不再有效。 對於 Gradle 7,您需要將 / 替換為 .; 這是我更新的排除項:

def testExcl = [
    'android.*',
    'com.android.*',
    'com.nativelibs4java.*',
    'com.ochafik.*',
    'com.fasterxml.*',
    'com.esotericsoftware.*',
    'com.google.*',
    'com.lmax.*',
    'com.sun.*',
    'jdk.*',
    'mockit.*',
    'org.apache.*',
    'org.bridj.*',
    'org.gcpud.common.*',
    'org.gcpud.testutil.*',
    'org.gradle.*',
    'org.hamcrest.*',
    'org.junit.*',
    'org.slf4j.*',
    'sun.*',
    'worker.*',
    '*Test',
    '*Test$*',
    '*TestIntegration',
    '*AllTests',
    '*Suite'
]

另請參閱以下 SO 帖子,了解從報告中排除類的其他方法(從報告中排除,而不是覆蓋本身):

使用 Gradle 過濾 JaCoCo 覆蓋率報告

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM