Maven:如何覆盖由库添加的依赖项
这是我的一般问题:
我的项目P取决于A取决于B取决于B取决于C的版本1.0.1。
D版本1.0.1存在问题,我想强制使用另一个模块。 我不知道如何在我的项目的POM中声明这个,因为我没有直接添加对D的依赖。 这是C宣布对D的依赖。
重要提示:在这种情况下,不仅版本发生更改,而且组和工件也会更改。 所以这不仅仅是重写依赖版本的问题,而是排除一个模块并包含另一个模块。
在具体的情况下,D是StAX,其1.0.1有一个bug。 根据bug中的注释,“通过stax-api-1.0-2(maven GroupId = javax.xml.stream)替换stax-api-1.0.1(maven GroupId = stax)”解决了问题,所以我我正在努力。
因此,D = stax:stax-api:jar:1.0.1和C = org.apache.xmlbeans:xmlbeans:jar:2.3.0
我使用maven 2.0.9以防万一。
mvn依赖项的输出:树“
mvn dependency:tree
[..snip..]
[INFO] +- org.apache.poi:poi-ooxml:jar:3.6:compile
[INFO] | +- org.apache.poi:poi-ooxml-schemas:jar:3.6:compile
[INFO] | | +- org.apache.xmlbeans:xmlbeans:jar:2.3.0:compile
[INFO] | | | - stax:stax-api:jar:1.0.1:compile
在我的项目的POM中,我对“A”具有以下依赖关系:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.6</version>
</dependency>
提前致谢。
只需在您当前的pom中指定版本。 此处指定的版本将覆盖其他版本。
强制版本
如果一个版本在当前的POM中使用特定的版本进行声明,那么它将永远得到尊重 - 但是,应该注意的是,如果它本身依赖于传递依赖关系,它也会影响其他poms下游。
资源:
或者,您可以排除您不需要的依赖关系。 STAX包含在JDK 1.6中,所以如果你使用1.6,你可以完全排除它。
我下面的例子对你来说有点不对劲 - 你只需要两个排除中的一个,但我不太确定哪一个。 还有其他版本的Stax是浮动的,在我的下面的示例中,我导入了导入B的B导入了C&D,每个导入都通过更传递的依赖项导入不同版本的Stax。 因此,在对'A'的依赖中,我排除了两个版本的Stax。
<dependency>
<groupId>a.group</groupId>
<artifactId>a.artifact</artifactId>
<version>a.version</version>
<exclusions>
<!-- STAX comes with Java 1.6 -->
<exclusion>
<artifactId>stax-api</artifactId>
<groupId>javax.xml.stream</groupId>
</exclusion>
<exclusion>
<artifactId>stax-api</artifactId>
<groupId>stax</groupId>
</exclusion>
</exclusions>
<dependency>
我在第三方库中也无法取代依赖关系。 我用排除了scot的方法,但我也在pom中添加了更新版本的依赖项。 (我用Maven 3.3.3)
因此,对于stAX示例,它看起来像这样:
<dependency>
<groupId>a.group</groupId>
<artifactId>a.artifact</artifactId>
<version>a.version</version>
<exclusions>
<!-- STAX comes with Java 1.6 -->
<exclusion>
<artifactId>stax-api</artifactId>
<groupId>javax.xml.stream</groupId>
</exclusion>
<exclusion>
<artifactId>stax-api</artifactId>
<groupId>stax</groupId>
</exclusion>
</exclusions>
<dependency>
<dependency>
<groupId>javax.xml.stream</groupId>
<artifactId>stax-api</artifactId>
<version>1.0-2</version>
</dependency>
链接地址: http://www.djcxy.com/p/29701.html
上一篇: Maven: how to override the dependency added by a library
下一篇: Is there anyway to exclude artifacts inherited from a parent POM?