maven-jar-plugin升级至3.1.2后执行失败,如何用classifier附加补充构件?
解决maven-jar-plugin 3.x版本的构件冲突问题
我之前升级这个插件时也遇到过一模一样的报错,原因是maven-jar-plugin从2.x升级到3.x后,对构件的生成规则做了严格限制:你之前在同一个<execution>里同时指定了jar和test-jar两个goal,新版本会认为你试图用test-jar替换主jar构件,所以抛出了这个提示。
要解决这个问题,核心是给test-jar这个“补充构件”指定一个classifier(分类器),让Maven能区分它和主jar。这里有两种清晰的配置方式:
方式一:拆分Execution(推荐)
把主jar和test-jar的生成逻辑拆成两个独立的<execution>,明确区分主构件和补充构件,这样最直观也不容易出问题:
<plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.1.2</version> <!-- 主jar的生成配置 --> <executions> <execution> <id>default-jar</id> <goals> <goal>jar</goal> </goals> <configuration> <archive> <manifestFile>src/main/resources/templates/MANIFEST.MF</manifestFile> <manifestEntries> <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName> <Bundle-Version>${project.version}</Bundle-Version> <Bundle-ManifestVersion>2</Bundle-ManifestVersion> <Bundle-Name>${project.groupId} ${project.artifactId} package</Bundle-Name> </manifestEntries> </archive> </configuration> </execution> <!-- test-jar的生成配置,指定classifier --> <execution> <id>test-jar</id> <goals> <goal>test-jar</goal> </goals> <configuration> <!-- 指定分类器,默认是tests,这里明确写出更清晰 --> <classifier>tests</classifier> </configuration> </execution> </executions> </plugin>
方式二:在同一Execution中配置Classifier(简化版)
如果不想拆分execution,也可以在<configuration>里为test-jar单独指定classifier,让Maven识别它是补充构件:
<plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.1.2</version> <executions> <execution> <goals> <goal>jar</goal> <goal>test-jar</goal> </goals> <configuration> <!-- 主jar的manifest配置 --> <archive> <manifestFile>src/main/resources/templates/MANIFEST.MF</manifestFile> <manifestEntries> <Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName> <Bundle-Version>${project.version}</Bundle-Version> <Bundle-ManifestVersion>2</Bundle-ManifestVersion> <Bundle-Name>${project.groupId} ${project.artifactId} package</Bundle-Name> </manifestEntries> </archive> <!-- 为test-jar指定分类器 --> <classifier>tests</classifier> </configuration> </execution> </executions> </plugin>
两种方式配置完成后,再执行mvn clean install就不会报错了。生成的test-jar会自动带上-tests后缀(比如xxx-1.0.0-tests.jar),和主jar(xxx-1.0.0.jar)区分开,Maven就不会认为是替换主构件了。
内容的提问来源于stack exchange,提问作者SLN
相关产品推荐
相关产品推荐

