【问题标题】:Java9 Multi-Module Maven Project Test DependenciesJava9 多模块 Maven 项目测试依赖项
【发布时间】:2018-04-19 04:18:32
【问题描述】:

我有一个多模块 maven 项目,其中包含三个模块 coreutilstest-utils

Core 有如下依赖定义

<dependency>
   <groupId>my.project</groupId>
   <artifactId>utils</artifactId>
</dependency>
<dependency>
   <groupId>my.project</groupId>
   <artifactId>test-utils</artifactId>
   <scope>test</scope>
</dependency>

我为所有三个模块添加了 Java 9 module-info.java 定义,core 看起来像这样:

module my.project.core {
   requires my.project.utils;
}

但是我不知道如何让core 的测试类能够在测试执行期间看到test-utils 类。当maven-surefire-plugin 尝试测试运行时,我得到类未找到。

如果我将requires my.project.testutils; 添加到coremodule-info.java

module my.project.core {
   requires my.project.utils;
   requires my.project.testutils; //test dependency
}

然后在编译时我收到一个错误,即找不到 my.project.testutils 模块(可能是因为它只是作为测试依赖项引入的)。

在 Java 9 模块化世界中如何处理测试依赖项?出于显而易见的原因,我不希望我的主代码引入测试依赖项。我错过了什么吗?

【问题讨论】:

  • 我不是 Maven maven,也没有使用过 Surefire 插件,但是 module-info.java 和两个 requires 绝对是错误的方向。通常,在 Java 9 中,通过“修补”模块来促进测试(Maven 和 Gradle 倾向于将其抽象掉)。另一方面,不清楚您是否看过这个 doc re: toolchains? - maven.apache.org/surefire/maven-surefire-plugin/java9.html
  • 这不使用 Surefire 插件,也不使用 test 范围(所以我不会写它作为答案),但如果这有帮助,这里是一个使用 Maven 的小型 Java9 示例 - github.com/codetojoy/WarO_Java_9_Maven
  • @MichaelEaster 修补模块上的部分在那里是正确的,但工具链部分似乎与问题无关。

标签: java maven java-9 maven-surefire-plugin java-platform-module-system


【解决方案1】:

使用 maven 和 java9,如果您的 my.project.testutils 是测试范围依赖项,则无需在模块描述符中显式包含 (requires)。


测试依赖是通过类路径本身来处理的。所以你可以简单地删除testutils,它会在执行测试时被maven修补。

module my.project.core {
   requires my.project.utils;
}

参考slide 30 pertaining to maven-compiler-plugin.

我还建议您查看 Robert 的 Where should I put unit tests when migrating a Java 8 project to Jigsawthis comment,以确认 maven 遵循的实现。

编辑:创建了一个sample project,比喻主模块和你的core一样,对guava的依赖和你的@一样987654335@ 和 junit 依赖项与您的 testutils 相同。

【讨论】:

  • 示例项目是死链接。
  • @OlivierGrégoire 看来我已经迁移了项目,会尝试恢复......到那时,Sormuras 的这些答案有很多示例链接 - this onethis one
  • 对于最新版本的 Gradle 似乎也是如此。如果您声明 testImplementationtestCompileOnlytestRuntimeOnly 依赖项,则不需要导入模块。
猜你喜欢
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
  • 2019-10-18
相关资源
最近更新 更多