我有一个包含三个模块( core、utils和test-utils )的多模块maven项目。
Core具有以下依赖项定义
<dependency>
<groupId>my.project</groupId>
<artifactId>utils</artifactId>
</dependency>
<dependency>
<groupId>my.project</groupId>
<artifactId>test-utils</artifactId>
<scope>test</scope>
</dependency>我为所有三个模块添加了Java9 module-info.java定义,core的如下所示:
module my.project.core {
requires my.project.utils;
}然而,我不知道如何让core的测试类能够在测试执行期间看到test-utils类,当maven-surefire-plugin尝试测试运行时,我得到了未找到的类。
如果我将requires my.project.testutils;添加到core的module-info.java中
module my.project.core {
requires my.project.utils;
requires my.project.testutils; //test dependency
}然后,在编译时,我得到一个无法找到my.project.testutils模块的错误(大概是因为它只是作为测试依赖项引入的)。
在Java 9模块化世界中,如何处理测试依赖关系?显然,我不希望我的主代码引入测试依赖项。我是不是遗漏了什么?
发布于 2017-11-07 01:31:33
对于maven和java9,如果您的my.project.testutils是测试范围依赖项,则不需要在模块描述符中显式地包含(requires)它。
通过类路径本身来处理测试依赖关系。因此,您可以简单地删除testutils,它将在执行测试时由maven修补。
module my.project.core {
requires my.project.utils;
}

我还建议您看看罗伯特的将Java 8项目迁移到Jigsaw时,我应该将单元测试放在哪里?和这句话,确认一下maven所遵循的实现。
编辑:创建了一个样本工程,它绘制了一个类推式:主模块与core相同,guava上的依赖与utils相同,junit依赖与testutils相同。
https://stackoverflow.com/questions/47146491
复制相似问题