2010-07-02 49 views
11

我有一个项目取决于供应商控制的工件。这个工件包含一些我依赖的类,还有一些是较老的并导致问题的类。有没有办法让maven自动扩展jar,删除类,并将它们重新打包为依赖项?我会试着举一个例子。从Maven中的依赖项中排除类

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 

所以 - 我需要在项目的Web使用ClassA,但我需要从dependency神器使用ClassB。我无法修改供应商:工件或我们:依赖关系。

有什么想法?

回答

8

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

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

5

如果您使用的是Maven 2.0.9+,那么只需将您的课堂放在一个罐子中,并将其声明为之前的供应商提供的工件。正如@Peter所提到的那样,Maven使用Maven 2.0.9以来的类路径的pom顺序(请参阅MNG-1412/MNG-3111)。

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

相关问题