6

一个由一些模块组成的 Maven 项目。我的模块之一是使用谷歌版本的番石榴依赖11.0.2。现在我正在我的项目中集成另一个模块,该模块也使用 guava 但版本14

所以我希望新模块使用番石榴版本14,但其余项目使用番石榴版本11.0.2。我尝试将<exclusion></exclusion>番石榴添加到新模块中,但没有奏效。

解决此问题的任何提示。

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

4

3 回答 3

5

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

于 2013-06-27T06:24:52.067 回答
5

据我了解您的问题,您可以在新模块 pom.xml 中添加一个<dependencyManagement>for :guava

<dependencyManagement>
  <dependencies>
      <dependency>
          <groupId>com.google.guava</groupId>
          <artifactId>guava</artifactId>
          <version>14.0.1</version>
      </dependency>
  </dependencies>
</dependencyManagement>
于 2013-06-27T06:27:42.133 回答
0

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

其次,解决这一冲突可能不是直截了当的。查看版本号转换(11 到 14)对我来说听起来像是一次重大转换,您可能有更好的机会保留 14 版本并排除 11 的东西。

如果版本更改与您的应用程序不兼容,您几乎别无选择,只能使用类似OSGi的方法来确保您可以在项目中运行同一库的不同版本。

于 2013-06-27T06:31:13.727 回答