为了账号安全,请及时绑定邮箱和手机立即绑定

Maven:如何覆盖库添加的依赖项

Maven:如何覆盖库添加的依赖项

收到一只叮咚 2019-11-12 12:48:27
这是我的一般性问题:我的项目P依赖于A,后者依赖于B,后者依赖于C,后者依赖于D的1.0.1版本。D的1.0.1版本存在问题,我想强制使用其他模块。我不知道如何在我的项目的POM中声明这一点,因为我没有直接添加对D的依赖。是C声明了对D的依赖。重要:在这种情况下,不仅版本会更改,组和工件也将更改。因此,这不仅仅是覆盖依赖项版本的问题,而是排除一个模块并包含另一个模块的问题。在具体情况下,D是StAX,其1.0.1有一个bug。根据错误中的注释,“通过将stax-api-1.0.1(maven GroupId = stax)替换为stax-api-1.0-2(maven GroupId = javax.xml.stream)解决了问题”正在尝试。因此,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>提前致谢。
查看完整描述

3 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

只需在当前pom中指定版本即可。此处指定的版本将覆盖其他版本。


强制版本

如果在当前POM中使用特定版本声明了版本,则将始终采用该版本-但是,应注意的是,如果该版本本身依赖于使用传递依赖项,则这也会影响下游的其他pom。


查看完整回答
反对 回复 2019-11-12
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

或者,您可以仅排除不需要的依赖项。STAX包含在JDK 1.6中,因此,如果您使用1.6,则可以完全排除它。


我下面的示例对您来说有点不对-您只需要两个排除项之一,但我不确定哪个是排除项。还有其他版本的Stax,在下面的示例中,我导入A,然后导入B,又导入C&D,每个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>


查看完整回答
反对 回复 2019-11-12
?
桃花长相依

TA贡献1860条经验 获得超8个赞

我也无法排除第三方库中的依赖项。我在排除时使用了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>


查看完整回答
反对 回复 2019-11-12
  • 3 回答
  • 0 关注
  • 1321 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信