小编Kev*_*aul的帖子

如何打开包并仅对JUnit测试要求依赖于测试范围模块

我正在将使用类路径的jar项目从Java 10迁移到使用Java 9拼图模块的Java 11。该项目有JUnit5测试。测试依赖项由maven在测试范围内提供。当另一个项目使用该模块时,如何使所有程序包打开以进行测试,但不打开?

jar项目只是为其他项目提供了一些类(例如实用程序项目)(因此不需要主类)。

该项目在/ src / main / java / a / b / c /中有5个软件包。使用此jar的项目应该可以访问其中的2个。其他3个仅供内部使用(供可访问者使用)。测试位于/ src / test / java / a / b / c /。这些测试具有测试范围中提供的依赖项(JUnit,mockito,junt-params),因为这些测试与使用此jar的项目无关

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我在/ src / main / java /中提供了一个module-info.java

module moduleName {

requires java.base;

exports a.b.c.package1;
exports a.b.c.package3;
}
Run Code Online (Sandbox Code Playgroud)

因此,现在,第1包和第3包中的公共课程应该可以按预期供其他项目使用(我尚未能够对此进行验证)。

现在运行测试会导致java.lang.reflect.InaccessibleObjectException:无法访问abcpackage1.collections.SomeTest():模块moduleName不会“打开abcpackage1”到未命名的模块@ 6a84a97d

当我打开包装(带有opens)时,一切运行顺利。但是现在所有程序包都已打开。我希望仅在测试期间才能访问包2、4和5,并且不应打开包1和3进行反射(因此只能导出)。

我想到了,因为maven告诉我未命名的模块 @ 6a84a97d,所以这可能是为测试而创建的模块。这使我尝试在/ src / test / java /中添加一个 …

java maven java-platform-module-system junit5

7
推荐指数
1
解决办法
562
查看次数

标签 统计

java ×1

java-platform-module-system ×1

junit5 ×1

maven ×1