首页 > 解决方案 > 让 maven surefire 在存在 module-info.java 文件的类路径上运行

问题描述

我正在尝试编写一个可以在模块路径上毫无问题地运行的库,但是我正在使用该org.testcontainers包进行测试,并且它们有许多在模块路径上不起作用的依赖项。

这些是我在尝试使用我的module-info.java礼物运行 surefire 时遇到的错误:

[警告] 无法从 visible-assertions-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:无效的模块名称:'native' 不是 Java 标识符

这些导致未找到类的进一步问题。

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

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

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

标签: javamavenmaven-surefire-plugin

解决方案


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

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

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


推荐阅读