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

时间:2017-04-26 09:31:59

标签: java maven jaxb

我想排除Maven插件的直接依赖关系,this answer中描述的方法不起作用(如this comment所示)。

作为一个特例:

<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-api(使用mvn ... -X)。我做错了什么?

(如果有人知道如何用该API的JDK 9等效替换该工件的依赖性[似乎发生在Java 8上,其中&#34; JAXB API os从[jar: ... jre / lib / rt.jar]&#34;],我很乐意为此开一个新问题。)

更新

无论如何,这都是一个实验,我通过编辑本地存储库中的插件pom.xml来排除依赖关系。现在mvn ... -X表明我还可以通过上述机制成功排除间接依赖(在本例中为org.jvnet.jaxb2.maven2:maven-jaxb22-plugin)。从maven-jaxb2-pluginmaven-jaxb22-plugin开始,只使用两种排除方式都无法解决问题。这表明排除通常有效,但显然不是插件的直接依赖。

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

3 个答案:

答案 0 :(得分:7)

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

我为它创建了MNG-6222,不确定我们是否会为Maven3修复此问题,但至少在下一个主要版本中这样做是有道理的。

答案 1 :(得分:1)

使用依赖项检查依赖项列表:tree和solve WTF lib引入了lib依赖项,然后将其排除在其中。也许你的依赖不能直接。

我希望能帮到你。

编辑:只需按照您的依赖关系层次结构

答案 2 :(得分:1)

我最后与maven-linkcheck-plugin有类似的情况我做了一个更强力的方法来删除doxia-linkcheck依赖关系并通过分叉maven-linkcheck-plugin使其使用my fork使用适当的依赖关系创建my own