Maven单项目为每个Java包生成独立Jar包的问题求助
解决Maven单项目生成多包独立Jar的问题
你的问题核心在于maven-jar-plugin的路径规则使用错误——你写的是文件系统层面的绝对/项目根路径,但插件需要的是基于编译后class文件目录(target/classes)的类路径格式。另外,用includes明确指定要包含的包,比用excludes排除其他包更清晰、不易出错,尤其适合固定包结构的场景。
下面是修正后的完整配置,每个执行单元只打包对应包的内容:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <!-- 建议升级到较新版本,兼容性更优 --> <executions> <!-- 打包first包的独立Jar --> <execution> <id>first-package-jar</id> <goals> <goal>jar</goal> </goals> <configuration> <classifier>first-jar</classifier> <!-- 仅包含first包下所有类(含子包) --> <includes> <include>first/**</include> </includes> </configuration> </execution> <!-- 打包second包的独立Jar --> <execution> <id>second-package-jar</id> <goals> <goal>jar</goal> </goals> <configuration> <classifier>second-jar</classifier> <includes> <include>second/**</include> </includes> </configuration> </execution> <!-- 打包third包的独立Jar --> <execution> <id>third-package-jar</id> <goals> <goal>jar</goal> </goals> <configuration> <classifier>third-jar</classifier> <includes> <include>third/**</include> </includes> </configuration> </execution> </executions> </plugin>
关键细节说明:
- 路径匹配规则:
first/**是基于target/classes的相对路径,能精准匹配first包下的所有class文件(包括子包类),插件可以正确识别。 - 版本升级:把插件版本从2.4更新到3.3.0(或最新稳定版),避免旧版本的路径解析bug。
- includes的优势:明确指定打包范围,比排除其他包的写法更直观,后续项目结构变动时也不容易出错。
执行mvn package后,你会在target目录下得到三个独立的Jar文件:
[你的项目名]-first-jar.jar[你的项目名]-second-jar.jar[你的项目名]-third-jar.jar
每个Jar内只会包含对应包的类文件,完全满足你的需求。
内容的提问来源于stack exchange,提问作者Alex Vulchev
相关产品推荐
相关产品推荐

