升级至Eclipse 2022-09后Tycho无法识别JUnit5测试的问题排查
Eclipse升级后Tycho无法识别JUnit5测试用例的解决方法
问题背景
将Eclipse从2022-06版本升级至2022-09(或2023-03)后,使用Tycho 2.7.4执行mvn clean verify时,JUnit5测试用例完全无法被识别,控制台输出No tests found导致构建失败。环境为Java 17,测试配置遵循Tycho JUnit5官方指引,在旧版Eclipse仓库下可正常运行。
问题原因
Eclipse 2022-09起,JUnit5相关组件的p2打包结构发生变更(如JAR文件名从org.junit.jupiter.api_x_x_x.jar改为junit-jupiter-api_x_x_x.jar),而Tycho 2.7.4版本对这种新打包格式的支持存在缺陷,无法正确关联JUnit5测试引擎与测试用例。
解决方案
方案1:升级Tycho至兼容版本
Tycho 2.8.0及以上版本已修复对新版JUnit5 p2打包的支持,操作步骤如下:
- 修改pom.xml中的
tycho-version属性:
<properties> <tycho-version>2.8.0</tycho-version> </properties>
- 若显式配置了
tycho-surefire-plugin,确保其版本与Tycho主版本一致:
<build> <plugins> <plugin> <groupId>org.eclipse.tycho</groupId> <artifactId>tycho-surefire-plugin</artifactId> <version>${tycho-version}</version> </plugin> </plugins> </build>
- 重新执行
mvn clean verify,测试用例即可被正常识别。
方案2:调整测试插件依赖配置(不升级Tycho的备选)
若无法升级Tycho,可通过手动配置依赖解决:
- 修改测试插件的
MANIFEST.MF,将原有的Import-Package替换为Require-Bundle,直接依赖JUnit5测试引擎:
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: De Foobar Tests Bundle-SymbolicName: de.foobar.tests;singleton:=true Bundle-Version: 1.0.0.qualifier Require-Bundle: org.junit;version="4.13.2", org.junit.jupiter.api;version="5.9.0", org.junit.jupiter.engine;version="5.9.0" Bundle-Vendor: Foobar Inc Bundle-RequiredExecutionEnvironment: JavaSE-17
(版本号可根据目标Eclipse仓库中的实际版本调整)
2. 确保pom.xml中的p2仓库指向2022-09或更高版本:
<repositories> <repository> <id>eclipse-release</id> <layout>p2</layout> <url>https://download.eclipse.org/releases/2022-09</url> </repository> </repositories>
- 执行
mvn clean verify验证测试运行状态。
注意事项
- 无需手动导入
org.junit.jupiter.engine.execution包,Tycho会通过测试引擎的依赖自动处理类路径。 - 优先推荐升级Tycho到最新稳定版(如3.x系列),后续对新Eclipse版本的兼容性更好。
内容的提问来源于stack exchange,提问作者Marteng
相关产品推荐
相关产品推荐

