如何排除 Maven 插件的直接依赖关系

2022-09-01 23:46:30

我想排除Maven插件的直接依赖关系,并且此答案中描述的方法不起作用(如此评论所示)。

举一个具体的例子:

<build>
    <plugins>
        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.13.2</version>
            <!-- more config -->
            <dependencies>
                <dependency>
                    <groupId>org.jvnet.jaxb2.maven2</groupId>
                    <artifactId>maven-jaxb2-plugin</artifactId>
                    <version>0.13.2</version>
                    <exclusions>
                        <exclusion>
                            <groupId>javax.xml.bind</groupId>
                            <artifactId>jaxb-api</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

我仍然在依赖项列表中看到(带有)。我做错了什么?javax.xml.bind:jaxb-apimvn ... -X

(如果有人知道如何用该API的JDK 9等效物替换对该工件的依赖性[似乎发生在Java 8上,其中“JAXB API os从[jar:...jre/lib/rt.jar]“],我很高兴为此打开一期新问题。

更新

想法已经用完了,无论如何,这是一个实验,我通过在本地存储库中编辑插件来排除依赖关系。现在表明还有一个间接依赖关系(在这种情况下由),我可以使用上面的机制成功排除它。仅仅使用排除、从 和 、并不能解决问题。这表明排除通常有效,但显然不适用于插件的直接依赖关系。pom.xmlmvn ... -Xorg.jvnet.jaxb2.maven2:maven-jaxb22-pluginmaven-jaxb2-pluginmaven-jaxb22-plugin

(顺便说一句,这确实导致了“Java JAXB API是从[jrt:/java.xml.bind]加载的”,这是我的目标。


答案 1

到目前为止,没有任何理由这样做,但这似乎是一个有效的理由。我能想到的最干净的解决方案是允许用插件依赖项的“none”覆盖范围。

我已经为它创建了MNG-6222,不确定我们是否会为Maven3修复此问题,但至少对于下一个主要专业来说,这样做是有意义的。


答案 2

我遇到了类似的情况,最后我做了一个更蛮力的方法来删除依赖关系,并通过分叉和创建我自己的具有适当依赖关系来使用它。maven-linkcheck-plugindoxia-linkcheckmaven-linkcheck-plugin


推荐