微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java9多模块Maven项目测试依赖项

我有一个多模块maven项目,包含三个模块core,utils和test-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定义,核心的内容如下所示:

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

但是我无法弄清楚如何让核心的测试类能够在测试执行期间看到test-utils类.当maven-surefire-plugin尝试测试运行时,我找不到类.

如果我添加一个需要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模块化世界中使用测试依赖项?出于显而易见的原因,我不希望我的主代码引入测试依赖项.我错过了什么吗?

解决方法

使用maven和java9,如果my.project.testutils是测试范围依赖项,则不需要在模块描述符中显式包含(要求)它.

通过类路径本身来处理测试依赖性.因此,您可以简单地删除testutils,并在执行测试时由maven进行修补.

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

请参阅slide 30 pertaining to maven-compiler-plugin.

我还建议你看一下Where should I put unit tests when migrating a Java 8 project to Jigsawthis comment,Robert确认maven的实现如下.

编辑:创建了一个类似于主模块与核心相同的sample project,对guava的依赖与你的utils相同,junit依赖与testutils相同.

原文地址:https://www.jb51.cc/java/128621.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐