Java 11迁移时Maven跨子项目测试类导入无法解析
Java 11迁移时跨模块测试类导入失败问题排查与解决
问题现象
从Java 8迁移到Java 11后,在Project Ba的MyTestB.java中尝试导入Project Aa的MyTestA.java时,出现错误:
Error: The import XXX cannot be resolved
但可以正常访问Project Aa中src/main/java下的类。
项目结构如下:
Parent Project X: Project A: Project Aa: src/test/java: MyTestA.java pom.xml pom.xml Project B: Project Ba: src/test/java: MyTestB.java pom.xml pom.xml pom.xml
已尝试操作
- 在
Project Ba的pom.xml中移除<scope>标签,声明Project A的两个依赖(分别为<type>jar</type>和<type>test-jar</type>) - 在
Project A及Aa的pom.xml中配置maven-jar-plugin的execution目标,同时指定"jar"和"test-jar"
解决方案
1. 精准配置Project Aa的测试代码打包
无需在父模块Project A重复配置,仅在Project Aa的pom.xml中配置maven-jar-plugin生成test-jar:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <goals> <goal>test-jar</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
执行mvn clean install打包Project Aa,确保本地仓库中存在对应的test-jar包。
2. 正确依赖Project Aa的test-jar
直接依赖Project Aa而非父模块Project A,并明确测试依赖范围:
<dependencies> <!-- 主代码依赖 --> <dependency> <groupId>你的项目groupId</groupId> <artifactId>Project Aa</artifactId> <version>对应版本号</version> </dependency> <!-- 测试代码依赖 --> <dependency> <groupId>你的项目groupId</groupId> <artifactId>Project Aa</artifactId> <version>对应版本号</version> <type>test-jar</type> <scope>test</scope> </dependency> </dependencies>
3. 处理Java 11模块系统影响(若启用)
如果项目使用Java模块系统(存在module-info.java),需要在Project Aa的module-info.test.java中导出测试包:
module com.example.projectaa { exports com.example.projectaa.testpackage to com.example.projectba; }
同时在Project Ba的测试模块描述中声明依赖:
module com.example.projectba { requires com.example.projectaa; requires com.example.projectaa.test; // 对应test-jar的模块名 }
4. 清理缓存并重新构建
执行命令清理本地仓库缓存,重新构建整个项目:
mvn clean install -U
内容的提问来源于stack exchange,提问作者Manoj Nanjundaswamy
相关产品推荐
相关产品推荐

