Maven-为什么运行多个包的构建会导致不同的结果



假设我有一个项目,有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

最后一种情况让我困惑,为什么模块B会失败?为什么它没有为每个模块运行而没有副作用?

问题是,失败消息确实没有帮助,并指向错误的服务。

您正在观察一些奇怪的行为,因为插件的作者没有太多关注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()
}
}

注入reactorProjects对于@aggregatormojo是有意义的,因为当我们处理多模块项目结构并具有父子关系时,我们需要特殊处理此类情况(例如,jacoco-maven-plugin中有两个mojo:reportreport-aggregate(。在你的情况下,插件的作者试图用一枪杀死两只兔子,在你的特定情况下,这会导致以下情况:

当你像-pl moduleA -am一样运行maven时,当maven执行Module B反应堆项目是Module A, Module B的验证阶段时,插件试图从Module A目录中提取exec文件,但失败了:Module A依赖于Module BModule A目录中没有exec文件。

相关内容

  • 没有找到相关文章

最新更新