【问题标题】:How to exclude a direct dependency of a Maven Plugin如何排除 Maven 插件的直接依赖关系
【发布时间】: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-pluginmaven-jaxb22-plugin 的两个排除项并不能解决问题。这表明排除在一般情况下有效,但显然不适用于插件的直接依赖关系。

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

【问题讨论】:

  • 也许javax.xml.bind:jaxb-api 以其他方式包含在内?作为您的项目或其他依赖项的依赖项?
  • 我更新了问题以解决您的评论。
  • 最好自己回答这个问题:当前的 Maven 版本似乎无法排除插件的直接依赖关系。
  • 到目前为止,还没有任何理由这样做,但这似乎是一个有效的理由。我能想到的最干净的解决方案是允许使用“none”覆盖插件依赖项的范围。
  • @RobertScholte 您是否考虑将您的评论转化为答案,最好带有指向文档解释此问题的链接(如果他们这样做,我没有看到),或者甚至可能是在补救时解决的问题情况?

标签: java maven jaxb


【解决方案1】:

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

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

【讨论】:

  • 另一个正当理由:build-helper 插件(直接)依赖于 bsh-2.04b (groupId: org.beanshell)。 2.06b之前的bsh版本存在远程执行漏洞(nvd.nist.gov/vuln/detail/CVE-2016-2510),所以需要淘汰老的bsh。但是,较新的版本有一个新的groupId(org.apache-extras.beanshell),所以声明org.apache-extras.beanshell:bsh:2.06b为依赖是不够的,org.beanshell:bsh必须排除,对于当前的 maven (3.6.2),这(仍然)是不可能的。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    使用dependency:tree 检查你的依赖列表并解决WTF lib 正在引入该lib 依赖,然后在其中排除。也许你的依赖不能是直接的。

    希望能帮到你

    编辑:只需遵循您的依赖层次结构

    【讨论】:

    • 依赖不是由 lib 引入的,而是由插件引入的,我知道它来自哪里——我的问题是为什么排除机制不起作用。
    猜你喜欢
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 2015-09-16
    • 2015-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多