假设我有一个包含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->成功

因此,正如预期的那样,我的构建通过了,因为我没有进行代码更改.

现在,如果我在没有适当的单元测试代码覆盖率的情况下对模块A进行代码更改,结果如下所示.

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

最后一种情况让我感到困惑,为什么模块B会失败?为什么它不是 for each 模块运行而没有副作用?

问题是,失败消息确实没有帮助,而且指向了错误的服务.

推荐答案

你观察到了一些奇怪的行为,因为插件的作者并没有太多关注Maven的内部 struct :

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()
 }
}

注入reactorProjects对于@aggregator mojos来说是有意义的,因为当我们处理多模块项目 struct 并具有父子关系时,我们需要对这种情况进行特殊处理(例如,jacoco-maven-plugin中有两个mojo:reportreport-aggregate).在你的 case 中,插件的作者试图一枪打死两只兔子,在你的特定 case 中,这会导致以下结果:

当你运行maven like -pl moduleA -am时,当maven执行Module Breact 堆项目的验证阶段为Module A, Module B时,插件试图从Module A目录中提取exec个文件,但失败了:Module A依赖于Module B,而Module A目录中没有exec个文件.

Java相关问答推荐

Java 8中的多个字段和计数

将数组整体转换为链接表

XPages-在第二次点击按钮之前延迟

流迭代列表<;对象>;上的NoSuchElementException

Java编译器抛出可能未正确初始化的错误?

在Spring Boot中使用哪个Java类来存储创建时间戳?

通过Spring Security公开Spring Boot执行器端点

try 在Android Studio中的infoWindow中使用EditText(Java)

解析方法";javax/imageio/metadata/IIOMetadata.getAsTree(Ljava/lang/String;)Lorg/w3c/dom/Node时加载约束冲突

在处理2个映射表时,没有更多的数据可从套接字读取

AbstractList保证溢出到其他方法

从泛型枚举创建EnumMap

如何在SWT菜单项文本中保留@字符

如何使用WebEnvironment.RANDOM_PORT获得第二个随机端口?

在ECLIPSE上的M1 Pro上运行JavaFX的问题

java中的MergeSort函数显示零

如何在 Spring Boot 中对来自请求的字符串列表进行验证?

如何仅记录在 java 中更新 API 调用期间获得更新的字段?

使用 PDFBOX 打印 JPEG2000

有没有办法维护在其外部的方法中创建但仅可用于类实例的变量?