如何修正Maven配置,为仅含测试类的项目生成含类的JAR包
问题分析与解决方案
问题根源
Maven遵循默认约定:
- 主代码目录为
src/main/java,编译后产物打包到主JAR(即jarName-1.0.0-SNAPSHOT.jar) - 测试代码目录为
src/test/java,编译后产物单独打包到jarName-tests.jar
你的项目没有src/main/java目录,因此主JAR没有可打包的内容,出现空JAR警告;所有测试类都被打包到了jarName-tests.jar中。
修正方案(二选一即可)
方案1:将测试目录设为主源码目录
修改Maven的源码目录配置,让src/test/java作为主代码目录,这样编译和打包时会直接将该目录下的类输出到主JAR中:
<build> <!-- 把src/test/java设为主源码目录 --> <sourceDirectory>src/test/java</sourceDirectory> <!-- 若不需要单独的测试目录,可注释或删除下方配置;如需保留,可指定其他目录 --> <!-- <testSourceDirectory>src/test/java</testSourceDirectory> --> <!-- 可选:禁用测试JAR打包,避免生成多余的jarName-tests.jar --> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <executions> <execution> <id>default-test-jar</id> <phase>none</phase> </execution> </executions> </plugin> </plugins> </build>
执行mvn package后,主JARjarName-1.0.0-SNAPSHOT.jar会包含所有测试类,且不会生成多余的tests.jar。
方案2:配置主JAR打包测试类的编译产物
保持原目录结构不变,修改maven-jar-plugin的配置,让主JAR包含target/test-classes下的编译结果:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <!-- 指定主JAR的类目录为测试类编译输出目录 --> <classesDirectory>${project.build.testOutputDirectory}</classesDirectory> </configuration> <!-- 可选:禁用默认的测试JAR打包,避免生成多余的jarName-tests.jar --> <executions> <execution> <id>default-test-jar</id> <phase>none</phase> </execution> </executions> </plugin> </plugins> </build>
执行mvn package后,主JAR会包含所有测试类,且不会出现空JAR警告和多余的tests.jar。
内容的提问来源于stack exchange,提问作者Anand Murugan
相关产品推荐
相关产品推荐

