【发布时间】:2017-04-26 09:31:58
【问题描述】:
我想排除 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 上发生的那样,其中“从 [jar:... jre/lib/rt.jar]"],我很高兴为此打开一个新问题。)
更新
想法用尽了,无论如何这是一个实验,我通过在本地存储库中编辑插件的pom.xml 排除了依赖项。现在mvn ... -X 表明还有一个间接依赖关系(在本例中为org.jvnet.jaxb2.maven2:maven-jaxb22-plugin),我可以使用上述机制成功排除它。仅使用来自maven-jaxb2-plugin 和maven-jaxb22-plugin 的两个排除项并不能解决问题。这表明排除在一般情况下有效,但显然不适用于插件的直接依赖关系。
(顺便说一句,这确实导致“Java JAXB API 是从 [jrt:/java.xml.bind] 加载的”,这是我的目标。)
【问题讨论】:
-
也许
javax.xml.bind:jaxb-api以其他方式包含在内?作为您的项目或其他依赖项的依赖项? -
我更新了问题以解决您的评论。
-
最好自己回答这个问题:当前的 Maven 版本似乎无法排除插件的直接依赖关系。
-
到目前为止,还没有任何理由这样做,但这似乎是一个有效的理由。我能想到的最干净的解决方案是允许使用“none”覆盖插件依赖项的范围。
-
@RobertScholte 您是否考虑将您的评论转化为答案,最好带有指向文档解释此问题的链接(如果他们这样做,我没有看到),或者甚至可能是在补救时解决的问题情况?