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

如何在Maven项目中将测试类打包进生成的JAR文件

嘿,我来帮你解决把JUnit测试类打包进Maven生成的JAR里的问题!默认情况下Maven会把主代码和测试代码分开编译、打包,测试类不会被包含进主JAR,但有几种实用的方法能实现你的需求:

方案1:让主JAR直接包含测试类

如果你希望测试类和主代码放在同一个JAR里,可以通过配置maven-jar-plugin,让它同时包含主代码编译目录和测试代码编译目录的内容。修改你的pom.xml,加入以下配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.3.0</version>
            <configuration>
                <!-- 包含所有class文件 -->
                <includes>
                    <include>**/*.class</include>
                </includes>
                <!-- 先指定测试类的编译目录 -->
                <classesDirectory>${project.build.testOutputDirectory}</classesDirectory>
                <!-- 再添加主代码的编译目录 -->
                <additionalClassesDirectories>
                    <additionalClassesDirectory>${project.build.outputDirectory}</additionalClassesDirectory>
                </additionalClassesDirectories>
                <!-- 如果需要指定JAR的主类,可取消下面注释并修改 -->
                <!-- <archive>
                    <manifest>
                        <mainClass>com.your.package.YourMainClass</mainClass>
                    </manifest>
                </archive> -->
            </configuration>
        </plugin>
    </plugins>
</build>

配置完成后,执行mvn clean package,生成的主JAR里就会同时包含主代码和测试类的.class文件了。

注意:如果你的测试类依赖JUnit等测试库,默认这些依赖的scope是test,打包时不会被包含进JAR。如果需要运行JAR里的测试类,记得把依赖的scope改成compile,比如:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

方案2:生成单独的测试JAR(更推荐,避免主JAR冗余)

如果不想把测试类混进主JAR,而是生成一个独立的包含测试类的JAR,同样可以用maven-jar-plugin的test-jar目标来实现。修改pom.xml如下:

<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 package后,target目录下会生成两个JAR:一个是你的主项目JAR(比如your-project-1.0.jar),另一个是测试类JAR(比如your-project-1.0-tests.jar),后者包含所有测试类文件。

这种方式更符合Maven的设计规范,不会让主JAR包含不必要的测试代码,适合需要单独分发测试类的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:12:03