You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java 9模块化JUnit 5测试报错:无法派生模块描述符

解决JUnit 5在Java 9模块系统下的FindException问题

你遇到的这个错误根源很明确:org.junit.jupiter.migrationsupport_5.0.0.v20170910-2246.jar这个迁移支持模块的描述符有问题——它声明了服务提供者org.junit.jupiter.engine.JupiterTestEngine,但这个类根本不在这个jar包里,而是属于junit-jupiter-engine模块。下面是几个针对性的解决方法:

1. 移除不必要的迁移支持模块(最快解决)

如果你的项目没有用到JUnit 4到JUnit 5的迁移特性(比如@RunWith(JUnitPlatform.class)这类兼容注解),完全可以直接把org.junit.jupiter.migrationsupport模块从依赖中移除,立刻避开这个模块描述符的bug。

修改你的module-info.java,删除相关依赖声明:

module your.project.module {
    requires org.junit.jupiter.api;
    requires org.junit.jupiter.engine;
    // 删掉这行:requires org.junit.jupiter.migrationsupport;
}

2. 升级JUnit 5到稳定新版本

你当前用的JUnit 5.0.0是非常早期的版本,模块系统相关的bug还比较多。建议升级到5.9.x或更高的稳定版本,这些版本已经修复了大量模块描述符的问题。

在Eclipse中重新添加JUnit 5库时,选择最新的稳定版本,务必保证所有JUnit 5模块(api、engine、migrationsupport等)的版本完全一致。

3. 清理Eclipse的p2缓存并重新导入模块

报错里提到的jar存在于Eclipse的p2缓存池中,可能出现了缓存损坏或版本不匹配的情况:

  • 先关闭Eclipse
  • 找到路径C:\Users\Tim HP.p2\pool\plugins,删除所有以org.junit.jupiter开头的jar文件
  • 重启Eclipse,重新给项目添加JUnit 5模块,确保下载的是完整且版本统一的模块包

4. 确认模块路径配置正确

在Eclipse的项目构建路径中,一定要把JUnit 5的所有模块添加到模块路径(Modulepath),而不是类路径(Classpath)。如果放在类路径下,Java模块系统会自动推导模块描述符,很容易出现这类找不到提供者的错误。

内容的提问来源于stack exchange,提问作者Linsane

火山引擎 最新活动