从Maven的依赖项中排除类

问题描述 投票:12回答:2

我有一个项目,该项目取决于由供应商控制的工件。该工件包含一些我依赖的类,有些类比较旧并且会引起问题。有没有办法让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,但是我需要使用ClassB工件中的dependency。我无法修改Supplier:artifact或us:dependency。

任何想法?!

java maven-2
2个回答
9
投票

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

或者,您也可以按照我的要求查看maven shade plugin,因为它确实符合您的要求。


5
投票

如果您使用的是Maven 2.0.9+,则只需将您的类放在jar中,并将其声明为依赖项[[之前来自供应商的工件。如@Peter所述,从Maven 2.0.9起,Maven对类路径使用pom顺序(请参见MNG-1412 / MNG-3111)。

[如果出于某种原因您对该解决方案不满意,则可以使用Maven Dependency Plugin和一些target/classesdependency:unpack的依赖项解压缩到dependency:unpack(应该在编译类路径中)(参见excludes)。我什至不会尝试重新打包它,这将引入无用的复杂性(如果可行,在编译类路径上用新的jar替换旧的jar不会很简单)。
© www.soinside.com 2019 - 2024. All rights reserved.