You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:25:59