【问题标题】:Exclude classes from a dependency in Maven从 Maven 中的依赖项中排除类
【发布时间】:2010-07-02 15:36:32
【问题描述】:

我有一个项目依赖于由供应商控制的工件。该工件包含一些我所依赖的类,以及一些较旧并导致问题的类。有没有办法让 maven 自动扩展 jar、删除类并将它们重新打包为依赖项?我试着举个例子。

supplier:artifact:1.0.0
com.supplier.useful.ClassA
com.supplier.dto.ClassB (old)

us:dependency:1.1.20
com.supplier.dto.ClassB (new)

us:project-web:1.1.20
- supplier:artifact:1.0.0
- us:dependency:1.1.20

所以 - 我需要在 project-web 中使用 ClassA,但我需要使用来自 dependency 工件的 ClassB。我无法修改供应商:工件或我们:依赖关系。

有什么想法吗?!

【问题讨论】:

    标签: java maven-2


    【解决方案1】:

    由于 2.0.9 版 maven 保留了类路径顺序,因此如果您在供应商 jar 之前的 jar 中定义修补类,它将隐藏供应商实现。

    或者,您也可以查看maven shade plugin,因为它完全符合我的要求。

    【讨论】:

      【解决方案2】:

      如果您使用的是 Maven 2.0.9+,那么只需将您的类放在一个 jar 中并将其声明为依赖项来自供应商的工件之前。正如@Peter 所提到的,Maven 从 Maven 2.0.9 开始使用 pom 顺序作为类路径(参见 MNG-1412 / MNG-3111)。

      如果出于某种原因您对该解决方案不满意,那么您可以使用Maven Dependency Plugin 使用dependency:unpack 和一些excludes 解压缩target/classes 中的依赖项(应该在编译类路径上) (见Unpacking specific artifacts)。我什至不会尝试重新打包它,这会引入无用的复杂性(如果可行的话,在编译类路径上用新的 jar 替换旧的 jar 并非易事)。

      【讨论】:

        猜你喜欢
        • 2016-06-11
        • 1970-01-01
        • 1970-01-01
        • 2012-02-25
        • 2016-02-28
        • 2020-04-19
        • 2015-09-23
        • 1970-01-01
        • 2011-12-15
        相关资源
        最近更新 更多