Maven依赖冲突

时间:2013-06-27 05:37:18

标签: java maven dependencies project-management pom.xml

由一些模块组成的maven项目。我的一个模块是使用google版本11.0.2的guava依赖项。现在我正在我的项目中集成另一个模块,该模块也使用guava但版本14

所以我希望新模块使用guava版本14,但剩下的项目使用guava版本11.0.2。我已经尝试将<exclusion></exclusion> guava添加到新模块中,但它不起作用。

解决此问题的任何提示。

更新:@Guillaume Darmont的答案解决了不同模块的问题。但现在我的问题是,新模块有2个依赖项,其中一个使用guava 11.0.2而另一个使用14.0。如何管理这个。我们可以在模块的pom中单独指定它应该使用哪种版本的番石榴。?

3 个答案:

答案 0 :(得分:5)

mvn dependency:tree命令将帮助确定哪个模块带来了Guava 14 jar文件。

答案 1 :(得分:4)

根据我的理解,您可以在新模块pom.xml中为<dependencyManagement>添加guava

<dependencyManagement>
  <dependencies>
      <dependency>
          <groupId>com.google.guava</groupId>
          <artifactId>guava</artifactId>
          <version>14.0.1</version>
      </dependency>
  </dependencies>
</dependencyManagement>

答案 2 :(得分:0)

首先尝试mvn dependency tree并检查输出可能已从多个项目依赖项中传递11.0.2,并且您需要直接/间接地向所有依赖项添加排除按照您要排除的特定番石榴版本。

其次解决这场冲突可能不是直截了当的。看看版本号转换(11到14)听起来像是一个重大过渡,你可能有更好的机会保留14版本并排除11个版本。

如果版本更改与您的应用程序不兼容,您几乎没有选择,只能使用OSGi之类的内容来确保您可以在项目中运行相同库的不同版本。