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

Maven多模块编译报错:acceptance-test无法找到application类

解决方案:Maven多模块acceptance-test编译类找不到问题

核心原因

编译失败本质是acceptance-test模块未正确引入application模块的代码依赖,IntelliJ能识别是因为它自动关联了模块依赖,但Maven编译需要显式配置依赖关系;若需访问application的测试类,还需额外配置生成测试Jar包。


步骤1:配置application模块的依赖引入

情况1:仅需application的主代码(src/main/java)

在acceptance-test/pom.xml中添加对application模块的依赖:

<dependencies>
    <dependency>
        <groupId>${project.parent.groupId}</groupId>
        <artifactId>application</artifactId>
        <version>${project.parent.version}</version>
    </dependency>
</dependencies>

情况2:需要application的测试代码(src/test/java)

如果acceptance-test要用到application里的测试类(如测试基类、工具类),需先让application模块生成测试Jar包:

在application/pom.xml的build节点下添加maven-jar-plugin配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>test-jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

然后在acceptance-test/pom.xml中添加测试Jar的依赖:

<dependencies>
    <!-- 主代码依赖 -->
    <dependency>
        <groupId>${project.parent.groupId}</groupId>
        <artifactId>application</artifactId>
        <version>${project.parent.version}</version>
    </dependency>
    <!-- 测试代码依赖 -->
    <dependency>
        <groupId>${project.parent.groupId}</groupId>
        <artifactId>application</artifactId>
        <version>${project.parent.version}</version>
        <classifier>tests</classifier>
        <scope>test</scope>
    </dependency>
</dependencies>

步骤2:确保Maven编译顺序正确

你的父pom已将application放在modules列表首位,Maven会自动先编译application再编译acceptance-test,但必须从父项目根目录执行Maven命令,比如:

mvn clean compile

或安装到本地仓库:

mvn clean install

不要单独在acceptance-test模块下执行编译,否则Maven无法找到未安装的application依赖。


步骤3:检查maven-shade-plugin配置

确保shade插件打包时包含所有依赖类,示例配置如下(acceptance-test/pom.xml):

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.4.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <!-- 指定可执行Jar的主类 -->
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>com.example.acceptance.TestMain</mainClass>
                            </transformer>
                        </transformers>
                        <!-- 可选:过滤不需要的类,默认会包含所有依赖类 -->
                        <!-- <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters> -->
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

排查小技巧

  1. 在acceptance-test模块执行mvn dependency:tree,查看是否正确引入了application的依赖
  2. 检查本地Maven仓库(默认~/.m2/repository),确认application的Jar包(包括测试Jar)已生成并存在
  3. 在IntelliJ中执行File > Sync Project with Maven,同步配置后再尝试Maven编译

内容的提问来源于stack exchange,提问作者Matrix12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:35:10