让maven-surefire在存在module-info.java文件的类路径上运行



我正在尝试编写一个可以在模块路径上运行而不会出现问题的库,但我正在使用org.testcontainers包进行测试,它们有许多依赖项在模块路径中不起作用。

以下是我在module-info.java存在的情况下尝试运行surefire时遇到的错误:

[警告]无法从visible-aertions-2.1.1.jar中提取模块名称:在顶级目录中找到TtyCheck.class(未命名包模块中允许([警告]无法从中提取模块名称native-lib-loader-2.0.2.jar:native-lib.loader:无效的模块名称:"native"不是Java标识符[警告]无法提取模块名称来自junixsocket-native-common-2.0.4.jar:junixsocket.native.common:无效的模块名称:"本机"不是Java标识符

这会导致找不到类的进一步问题。

请注意,这是一个运行时问题,代码编译没有问题,生成的jar也能正常工作。

据我所知,如果存在module-info.java文件,它会尝试在模块路径上运行测试。

有没有什么方法可以禁用这种行为,并使maven确信在类路径而不是模块路径上运行测试?

我通过添加解决了这个问题

<configuration>
<forkCount>0</forkCount>
</configuration>

对于maven-surefire-plugin-plugin部分,这给了我警告[WARNING] useSystemClassloader setting has no effect when not forking

从Surefire 3.0.0-M2开始,正确的解决方案是设置:

<configuration>
<useModulePath>false</useModulePath>
</configuration>

请参阅https://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#useModulePath了解更多信息。

最新更新