如何配置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
相关产品推荐
相关产品推荐

