多模块Maven项目中maven-jar-plugin执行引发编译异常问题
问题分析与解决方案
问题根源
你当前的配置覆盖了maven-jar-plugin默认的test-jar构建行为。maven-jar-plugin的test-jar目标默认会打包target/test-classes下的编译好的测试类,这个JAR正是additional-module通过测试依赖引用的核心。当你在execution中指定testClassesDirectory为自定义目录时,这个execution会替代默认的test-jar构建流程,导致原本包含main-application测试类的默认测试JAR无法生成,additional-module自然找不到对应的类。
解决方案
要同时实现生成供additional-module使用的默认测试JAR和打包自定义目录的额外JAR两个目标,你需要配置两个独立的execution:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <executions> <!-- 生成默认测试JAR,供additional-module依赖 --> <execution> <id>default-test-jar</id> <goals> <goal>test-jar</goal> </goals> <!-- 保留默认配置,不修改testClassesDirectory --> </execution> <!-- 打包自定义目录的额外JAR --> <execution> <id>additional-jar</id> <phase>test-compile</phase> <goals> <goal>test-jar</goal> </goals> <configuration> <testClassesDirectory>${project.build.directory}/extra-classes-input</testClassesDirectory> <outputDirectory>${project.build.directory}/extra-classes-output</outputDirectory> <!-- 设置classifier区分额外JAR,避免与默认测试JAR冲突 --> <classifier>extra</classifier> </configuration> </execution> </executions> </plugin>
配置说明
- 第一个execution会生成
main-application-<version>-tests.jar,这是additional-module依赖的核心测试JAR,完全保留原有编译逻辑,不会导致类找不到的问题。 - 第二个execution会生成
main-application-<version>-extra.jar,存放在你指定的extra-classes-output目录下,不会被其他模块自动依赖,符合你“不希望额外JAR出现在类路径”的需求。
内容的提问来源于stack exchange,提问作者JackPGreen
相关产品推荐
相关产品推荐

