Eclipse中如何配置带模块与测试依赖的Maven Java项目
Eclipse下Maven模块化Java项目测试依赖配置问题
项目基本属性
当前配置的项目具备以下特征:
- 基于Maven完成构建流程配置
- 已完成Java模块化配置,主源码路径下包含
module-info.java文件 - 项目内包含对应单元测试代码
项目遵循Maven标准目录结构,具体层级如下:
MyProject |- src/main/java | |- (All the packages) | |- module-info.java |- src/test/java | |- (All test packages) |- pom.xml
核心故障表现
当前环境下存在依赖识别异常:只有将测试依赖写入主代码路径下的module-info.java时,测试代码才能正常识别对应依赖,示例配置如下:
module MyProject { exports dev.dietermai.MyProject; requires org.junit.jupiter.api; }
但测试依赖的scope为test,src/main/java路径下的主代码本身不允许访问该作用域的依赖,因此将测试依赖写入主模块的module-info.java属于不符合规范的错误配置。
经排查判断,问题根因为Eclipse默认将src/test/java下的测试源码识别为src/main/java下主模块的组成部分,未实现模块化场景下主代码与测试代码的类加载隔离。
已验证的存在缺陷的方案
目前已尝试多种解决路径,均存在明显缺陷无法落地:
- 将
module-info.java整体移动到src/test/java目录:方案无效,Eclipse仍可识别项目为模块化项目,但该文件内配置的所有依赖均无法被正常加载,原因是模块描述文件位于测试目录下时无法被主模块类路径识别 - 在
src/test/java目录下新增第二个独立的module-info.java:会触发Eclipse大量运行异常,包括持续生成错误日志、弹出报错窗口、包资源管理器视图显示错乱等问题 - 单独创建独立的Eclipse项目存放测试代码:可以解决依赖识别问题,但会彻底破坏Maven默认目录结构,不符合通用构建规范
- 在Eclipse项目配置中移除
src/test/java目录的测试源码标记:可以临时解决依赖识别问题,但会导致Eclipse本地配置与Maven配置不一致,每次执行Maven项目更新同步后,手动修改的配置都会被还原
配置诉求
目前怀疑是配置流程存在错误,寻求可同时符合Maven规范、适配Eclipse运行逻辑的正确模块化项目配置方案。
内容的提问来源于stack exchange,提问作者Dieter
相关产品推荐
相关产品推荐

