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

Java跨项目复用测试类:test-jar打包缺失致类找不到问题解决

解决方案:将test-jar依赖纳入打包后的lib目录

我之前也碰到过一模一样的问题!核心原因是Maven默认的打包逻辑不会自动把test-jar类型的依赖纳入最终的lib目录——毕竟这类jar最初是为测试场景设计的,哪怕你把scope改成了compile,打包插件还是需要额外配置才能识别并处理它。下面给你两种常用的解决办法:

方法一:手动复制test-jar到lib目录并配置Class-Path

这种方式适合需要保留依赖分离结构的场景,会把test-jar复制到项目打包后的lib文件夹,同时让主jar的Manifest文件指向这些依赖。

在第二个项目的pom.xml中添加以下插件配置:

<build>
    <plugins>
        <!-- 复制test-jar依赖到lib目录 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-test-jar-deps</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        <!-- 明确指定要复制test-jar类型的依赖,若需要其他jar可添加`jar`类型 -->
                        <includeTypes>test-jar</includeTypes>
                        <!-- 排除不需要的测试范围依赖 -->
                        <excludeScope>test</excludeScope>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <!-- 配置主jar的Manifest,让运行时能找到lib中的依赖 -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <classpathPrefix>lib/</classpathPrefix>
                        <!-- 如果是可运行jar,记得替换成你的主类全限定名 -->
                        <mainClass>com.yourcompany.yourapp.MainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

执行mvn package后,你会在target/lib下看到那个test-jar,主jar的Manifest也会自动添加对应的Class-Path条目。

方法二:打包成包含所有依赖的Fat Jar

如果你想把test-jar里的类直接合并到最终的可执行jar中,可以用maven-assembly-plugin打包成Fat Jar:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>3.6.0</version>
            <executions>
                <execution>
                    <id>build-fat-jar</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                    <configuration>
                        <!-- 使用官方的jar-with-dependencies模板 -->
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <archive>
                            <manifest>
                                <!-- 替换成你的主类全限定名 -->
                                <mainClass>com.yourcompany.yourapp.MainClass</mainClass>
                            </manifest>
                        </archive>
                        <!-- 确保test-jar被解压并合并到最终jar中 -->
                        <dependencySets>
                            <dependencySet>
                                <includes>
                                    <include>firstproject:artifactId:test-jar:*</include>
                                </includes>
                                <unpack>true</unpack>
                            </dependencySet>
                        </dependencySets>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

执行mvn package后,target目录下会生成一个带-jar-with-dependencies后缀的jar,这个jar已经包含了test-jar里的所有类,运行时不会再出现找不到类的问题。

额外注意事项

  • 确保第一个项目的test-jar已经正确安装到本地Maven仓库(执行mvn install),如果是团队共享,要上传到公司的Maven私服。
  • 检查依赖的groupId、artifactId、version是否完全匹配,避免拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:51:48