我有一个使用maven构建的Java应用程序,它引入了许多库。该应用程序在一个git库中(具有自己的maven构建),每个库都在其自己的git库中(具有自己的maven构建)。此外,应用程序和一些库都依赖于guava。
应用程序的pom.xml文件指定了guava版本为19.0:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
</dependencies>
该应用程序还导入了另一个名为library1的库。 library1 也依赖于 guava。但是 library1 的 pom.xml 指定了 guava 的一个较新版本:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
</dependencies>
应用程序构建时,Maven选择了在应用程序级别指定的Guava版本。但是这导致Library1失败,因为它期望使用更新的Guava版本。
如果我们使用的是Gradle并尝试指定这个Guava版本组合,我相信Gradle会导致构建失败,这可能是正确的做法。
考虑到我们可能会有POM.xml文件存在这样的版本差异,是否有一种方法可以设置Maven,以便它会注意到这种差异并且要么失败构建,要么显示关于问题的非常突出的警告?