Eclipse Oxygen 3a(4.7.3a)搭配Java 9时无法找到测试类
解决Eclipse中Java 9适配JFXtras时JUnit及测试类找不到的问题
我之前也碰到过类似的Java 9模块与非模块测试项目在Eclipse里的兼容问题,结合你的描述来看,核心矛盾应该是Eclipse对**模块路径(Module Path)和类路径(Classpath)**的处理逻辑和IntelliJ存在差异,尤其是你的jfxtras-test-support并非Java 9模块,这就需要针对性调整配置。下面是具体的排查和解决步骤:
1. 检查主项目的module-info.java配置
如果你的主项目(比如jfxtras-common)是Java 9模块,需要确保模块描述符里正确声明了对非模块依赖的访问权限:
- 对于JUnit,需要添加静态依赖声明:
(requires static junit;static表示该依赖仅在编译和测试时需要,不影响运行时) - 对于测试类所在的包,需要开放给JUnit以支持反射调用(JUnit需要通过反射实例化测试类):
opens com.your.package.to.test to junit; - 对于非模块的
jfxtras-test-support,由于它没有module-info.java,Eclipse会将其视为自动模块,你需要在主项目的module-info.java里添加:requires static jfxtras.test.support;
2. 调整Eclipse的构建路径分类
Eclipse对模块路径和类路径的区分很严格,你需要确保:
- 在
Java Build Path的Projects标签下,将jfxtras-test-support添加到**类路径(Classpath)**而非模块路径(Module Path) - 在
Libraries标签下,同样将JUnit等依赖jar包放在类路径中,不要误放到模块路径里
3. 修正JUnit运行配置的路径设置
有时候即使构建路径配置正确,运行配置里的路径可能还是有问题:
- 打开
Run Configurations,找到对应的JUnit测试配置 - 切换到
Classpath标签,确认jfxtras-test-support和JUnit jar都在User Entries下的类路径中 - 如果主项目是模块,切换到
Arguments标签,在VM arguments里添加必要的模块参数,比如:
(--add-modules jfxtras.common,ALL-MODULE-PATHALL-MODULE-PATH会自动加载模块路径上的所有模块,避免遗漏依赖)
4. 清理重建项目,消除缓存问题
Eclipse的编译缓存有时候会导致类文件生成异常,执行以下步骤:
- 点击菜单栏
Project -> Clean,选择你的项目进行清理 - 右键项目,选择
Refresh刷新资源 - 如果项目使用Maven/Gradle构建,执行
Maven/Gradle -> Update Project,确保依赖和编译配置同步
5. 检查输出目录的读写权限
确保Eclipse有读写项目输出目录(默认是bin或者target/classes)的权限,Java 9模块的输出目录结构和之前略有不同,如果权限不足,可能导致编译后的类文件无法正常生成,进而出现“找不到类”的错误。
内容的提问来源于stack exchange,提问作者tbeernot
相关产品推荐
相关产品推荐

