假設我有一個包含 2 個模塊和 3 個 pom.xml 檔案的專案(1 個用于模塊 A,1 個用于模塊 B,1 個父 pom.xml)
我添加了以下插件來驗證我的變更集和另一個分支之間的代碼覆寫差異,如果它低于某個閾值https://github.com/SurpSG/diff-coverage-maven-plugin則失敗
如果我不更改代碼:
mvn clean verify-> 成功
mvn clean verify -T 1C -pl moduleA -am -U-> 成功
mvn clean verify -T 1C -pl moduleA, moduleB -am -U-> 成功
正如預期的那樣,我的構建正在通過,因為我沒有更改代碼。
現在,如果我在沒有適當的單元測驗代碼覆寫的情況下對 moduleA 進行代碼更改,結果如下。
mvn clean verify -T 1C -pl moduleA -am -U-> 模塊 B 失敗,跳過模塊 A
mvn clean verify -T 1C -pl moduleB -am -U-> 成功
mvn clean verify -T 1C -pl moduleA, moduleB -am -U-> 模塊 B 失敗,跳過模塊 A
最后一種情況讓我感到困惑,為什么 moduleB 會失敗?為什么它沒有為每個模塊運行而沒有副作用?
問題是失敗訊息確實沒有幫助并且指向錯誤的服務。
uj5u.com熱心網友回復:
您正在觀察一些奇怪的行為,因為插件的作者沒有過多關注 maven 內部:
private val rootProjectDir: File
get() = reactorProjects[0].basedir
private fun collectExecFiles(): Set<File> {
return if (dataFileIncludes == null) {
setOf(dataFile)
} else {
FileUtils.getFiles(rootProjectDir, dataFileIncludes, dataFileExcludes).toSet()
}
}
注入對于mojosreactorProjects是有意義的,因為當我們處理多模塊專案結構并具有父子關系時,我們需要對這種情況進行特殊處理(例如,在:和中有兩個 mojos )。在您的情況下,插件的作者試圖單槍殺死兩只兔子,在您的特定情況下會導致以下情況:@aggregatorjacoco-maven-pluginreportreport-aggregate
當您像這樣運行 maven-pl moduleA -am時,當 maven 執行Module B反應堆專案的驗證階段時Module A, Module B,插件嘗試exec從Module A目錄中獲取檔案并失敗:Module A依賴Module B并且目錄中沒有exec檔案Module A。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/504087.html
標籤:爪哇 行家 雅可可 jacoco-maven-插件
