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

如何配置Maven使mvn install生成的Jar包含JUnit测试代码

Maven项目将测试代码打包供其他依赖项目测试引用的配置方案

Maven默认执行mvn install生成的主jar包只会包含src/main目录下的生产代码,src/test目录下的测试代码不会被打入主包,要实现projectA的测试公共逻辑给projectB、projectC的测试模块引用,按以下步骤配置即可:

第一步:配置projectA生成测试专属jar包

在projectA的pom.xml文件的<build><plugins>节点下添加maven-jar-plugin配置,执行构建时会额外生成包含测试代码的独立jar包,不会污染生产用的主jar:

<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>

配置完成后重新在projectA目录下执行mvn install,本地仓库里会多生成一个命名格式为projectA-<版本号>-tests.jar的包,包内就是projectA的src/test目录下所有编译后的代码和测试资源。

第二步:在下游项目引入测试依赖

在projectB、projectC的pom.xml中添加对projectA测试包的依赖,注意依赖范围必须设置为test,避免测试逻辑被打包进下游项目的生产产物:

<dependency>
  <groupId>替换为projectA实际的groupId</groupId>
  <artifactId>替换为projectA实际的artifactId</artifactId>
  <version>替换为projectA实际使用的版本号</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

配置完成后,projectB、projectC的测试代码就可以直接引用projectA里写的测试公共工具、Mock逻辑、测试基类等内容了。

注意事项

  • 不要为了方便直接把测试代码混入projectA的主生产jar包,会导致生产发布包冗余测试逻辑,甚至带入测试用的敏感配置、Mock拦截逻辑,引发线上故障或安全风险。
  • projectA里的公共测试逻辑建议统一放在独立的包路径下,比如com.xxx.test.common、com.xxx.test.util,和projectA自身的单元测试用例分开,避免下游项目引用时加载到无关的测试类。
  • 如果后续测试公共逻辑的复用范围进一步扩大,更推荐把公共测试逻辑抽成独立的test-common公共组件,和业务项目projectA解耦,当前3个项目的规模下用test-jar的方案足够轻量,维护成本更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 21:15:44