Maven scala scoverage 尝试为其他模块拉包
Maven scala scoverage try to pull package for other module
我有一个具有以下架构的多模块 Maven 项目
root
- module-A
- module-B (depends on A)
- module-C1 (depends on B)
- module-C2 (depends on B)
...
- module-Cn (depends on B)
它有这样配置的 scoverage-maven-plugin。
<plugin>
<groupId>org.scoverage</groupId>
<artifactId>scoverage-maven-plugin</artifactId>
<version>${scoverage.plugin.version}</version>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
<aggregate>true</aggregate>
</configuration>
<executions>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
scoverage.plugin.version = 1.4.1
scala.version = 2.11.11
如果我从根项目在本地午餐 mvn clean package
,它会按预期工作,但在 CI 工作流程中(竹子,如果它有用的话),模块 A 和 B 很好,但是在 C1 上,我收到以下错误:
14-May-2020 14:23:41 [INFO] >>> scoverage-maven-plugin:1.4.1:report (report) > [scoverage]test @ C1 >>>
14-May-2020 14:23:41 [INFO]
14-May-2020 14:23:41 [INFO] --- scoverage-maven-plugin:1.4.1:pre-compile (report) @ C1 ---
14-May-2020 14:23:41 [INFO] Downloading from nexus: https://fakenexusurl.com/repository/all/module-B/1.0.0-SNAPSHOT/maven-metadata.xml
14-May-2020 14:23:41 [INFO] Downloading from nexus: https://fakenexusurl.com/repository/all/module-B/1.0.0-SNAPSHOT/module-B-1.0.0-SNAPSHOT.jar
14-May-2020 14:23:41 [INFO] ------------------------------------------------------------------------
14-May-2020 14:23:41 [INFO] Reactor Summary:
14-May-2020 14:23:41 [INFO]
14-May-2020 14:23:41 [INFO] root .......................................... SUCCESS [ 3.610 s]
14-May-2020 14:23:41 [INFO] module-A ................................... SUCCESS [01:38 min]
14-May-2020 14:23:41 [INFO] modulde-B ............................. SUCCESS [01:30 min]
14-May-2020 14:23:41 [INFO] module-C1 ........................... FAILURE [01:37 min]
14-May-2020 14:23:41 [INFO] module-C2 ........................... SKIPPED
14-May-2020 14:23:41 [INFO] ------------------------------------------------------------------------
14-May-2020 14:23:41 [INFO] BUILD FAILURE
14-May-2020 14:23:41 [INFO] ------------------------------------------------------------------------
14-May-2020 14:23:41 [INFO] Total time: 04:50 min
14-May-2020 14:23:41 [INFO] Finished at: 2020-05-14T14:23:41Z
14-May-2020 14:23:42 [INFO] Final Memory: 85M/1627M
14-May-2020 14:23:42 [INFO] ------------------------------------------------------------------------
14-May-2020 14:23:42 [ERROR] Failed to execute goal on project module-C1: Could not resolve dependencies for project group:module-C1:jar:1.0.0-SNAPSHOT: Could not find artifact group:module-B:jar:1.0.0-SNAPSHOT in nexus (https://fakenexusurl.com/repository/all/) -> [Help 1]
我看到它正在尝试从公司的关系中下载模块 B,当然,它不在那里,因为我们没有发布这个快照。但我不明白为什么它试图下载应该在同一项目的另一个模块中查找的依赖项。以及为什么它对依赖于 A 的 B 不做同样的事情,如果文件除了模块名称和依赖项之外是相同的。
所有使用的依赖项都在根 dependencyManagment
中声明,插件在 pluginManagment
中声明
CI 工作流程对我们来说是一个黑盒子,我们不知道他们是否使用了任何额外的配置文件。我们唯一知道的是 launch mvn clean package
命令。
scoverage 的流程创建了 maven 流程的一个分支,并重新运行所有直到测试。在这个 fork 中,模块之间的依赖关系没有得到很好的管理,所以从干净的执行中正确执行它的唯一方法是使用命令:
mvn clean install scoverage:report
将安装更改为打包、部署或任何需要报告的元素。这将强制 maven 在每个模块的末尾执行 scoverage:report
,防止不必要的行为。
找到 this thread 中的信息。
我有一个具有以下架构的多模块 Maven 项目
root
- module-A
- module-B (depends on A)
- module-C1 (depends on B)
- module-C2 (depends on B)
...
- module-Cn (depends on B)
它有这样配置的 scoverage-maven-plugin。
<plugin>
<groupId>org.scoverage</groupId>
<artifactId>scoverage-maven-plugin</artifactId>
<version>${scoverage.plugin.version}</version>
<configuration>
<scalaVersion>${scala.version}</scalaVersion>
<aggregate>true</aggregate>
</configuration>
<executions>
<execution>
<id>report</id>
<phase>prepare-package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
scoverage.plugin.version = 1.4.1 scala.version = 2.11.11
如果我从根项目在本地午餐 mvn clean package
,它会按预期工作,但在 CI 工作流程中(竹子,如果它有用的话),模块 A 和 B 很好,但是在 C1 上,我收到以下错误:
14-May-2020 14:23:41 [INFO] >>> scoverage-maven-plugin:1.4.1:report (report) > [scoverage]test @ C1 >>>
14-May-2020 14:23:41 [INFO]
14-May-2020 14:23:41 [INFO] --- scoverage-maven-plugin:1.4.1:pre-compile (report) @ C1 ---
14-May-2020 14:23:41 [INFO] Downloading from nexus: https://fakenexusurl.com/repository/all/module-B/1.0.0-SNAPSHOT/maven-metadata.xml
14-May-2020 14:23:41 [INFO] Downloading from nexus: https://fakenexusurl.com/repository/all/module-B/1.0.0-SNAPSHOT/module-B-1.0.0-SNAPSHOT.jar
14-May-2020 14:23:41 [INFO] ------------------------------------------------------------------------
14-May-2020 14:23:41 [INFO] Reactor Summary:
14-May-2020 14:23:41 [INFO]
14-May-2020 14:23:41 [INFO] root .......................................... SUCCESS [ 3.610 s]
14-May-2020 14:23:41 [INFO] module-A ................................... SUCCESS [01:38 min]
14-May-2020 14:23:41 [INFO] modulde-B ............................. SUCCESS [01:30 min]
14-May-2020 14:23:41 [INFO] module-C1 ........................... FAILURE [01:37 min]
14-May-2020 14:23:41 [INFO] module-C2 ........................... SKIPPED
14-May-2020 14:23:41 [INFO] ------------------------------------------------------------------------
14-May-2020 14:23:41 [INFO] BUILD FAILURE
14-May-2020 14:23:41 [INFO] ------------------------------------------------------------------------
14-May-2020 14:23:41 [INFO] Total time: 04:50 min
14-May-2020 14:23:41 [INFO] Finished at: 2020-05-14T14:23:41Z
14-May-2020 14:23:42 [INFO] Final Memory: 85M/1627M
14-May-2020 14:23:42 [INFO] ------------------------------------------------------------------------
14-May-2020 14:23:42 [ERROR] Failed to execute goal on project module-C1: Could not resolve dependencies for project group:module-C1:jar:1.0.0-SNAPSHOT: Could not find artifact group:module-B:jar:1.0.0-SNAPSHOT in nexus (https://fakenexusurl.com/repository/all/) -> [Help 1]
我看到它正在尝试从公司的关系中下载模块 B,当然,它不在那里,因为我们没有发布这个快照。但我不明白为什么它试图下载应该在同一项目的另一个模块中查找的依赖项。以及为什么它对依赖于 A 的 B 不做同样的事情,如果文件除了模块名称和依赖项之外是相同的。
所有使用的依赖项都在根 dependencyManagment
中声明,插件在 pluginManagment
CI 工作流程对我们来说是一个黑盒子,我们不知道他们是否使用了任何额外的配置文件。我们唯一知道的是 launch mvn clean package
命令。
scoverage 的流程创建了 maven 流程的一个分支,并重新运行所有直到测试。在这个 fork 中,模块之间的依赖关系没有得到很好的管理,所以从干净的执行中正确执行它的唯一方法是使用命令:
mvn clean install scoverage:report
将安装更改为打包、部署或任何需要报告的元素。这将强制 maven 在每个模块的末尾执行 scoverage:report
,防止不必要的行为。
找到 this thread 中的信息。