You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:58:32