问题 从Maven中的依赖项中排除类


我有一个项目依赖于供应商控制的工件。此工件包含一些我依赖的类,以及一些较旧且导致问题的类。有没有办法让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

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

有任何想法吗?!


4098
2017-07-02 15:36


起源



答案:


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

或者你可以看看 maven shade插件 因为它完全按照我的要求行事。


9
2017-07-02 15:52





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

如果由于某种原因您对此解决方案不满意,那么您可以使用 Maven依赖插件 解压缩依赖关系 target/classes (应该在编译类路径上)使用 dependency:unpack 和一些 excludes (看到 解压缩特定工件)。我甚至不会尝试重新打包它,这将引入无用的复杂性(如果可行的话,在编译类路径中用新的替换旧jar将不会是微不足道的)。


5
2017-07-02 17:45