我已经写了一个我写的库,它依赖于Guava版本20.0(与JDK 1.7兼容的最新版本)
然后我编写了一个使用该库的应用程序以及uk.org.lidalia:slf4j-test:1.2.0(带有测试范围)。 slf4j-test依赖于Guava版本14.0.1。
我的问题是我的应用程序看到两个不同版本的Guava作为传递依赖项并选择了OLDER版本。现在,当我在我的库中调用某些方法时,我得到了Class或Method not exceptions。
我可以(并且已经)将Guava排除为slf4j-test的依赖项,它现在解决了这个问题,但如果我引入另一个使用Guava的依赖项,问题就会返回。
所以我的问题是:为什么Maven会选择旧版本的依赖项,我如何总是选择最新版本。
答案 0 :(得分:5)
你不能强迫Maven总是挑选最新版本。但是你可以做几件事:
如果您在自己的pom中声明依赖项,则此版本始终获胜。因此,如果您在pom中依赖guava 20.0,那么你就会得到这个。
如果这不合适,您可以在dependencyManagement中输入一个条目来设置guava的版本。这将覆盖所有可传递设置的版本(如示例中的14.0.1)。
Maven enforcer插件有一个规则,确保所有依赖项都被评估为最新版本 - 但它不会选择最新版本,如果未选择它,它只会失败。然后你需要自己选择上面的方法(1)或(2)。