我们有几个不同的应用程序可能会或可能不会一起交互。当它们一起交互时,由于第三方库版本不匹配(让它成为Spring或其他东西)而存在问题。
这些应用程序的pom文件是分开的,但为了解决上述问题,我们希望它们使用相同版本的第三方库。最简单的方法是在公共属性文件中指定版本,然后让相应的pom.xml从属性文件中读取版本。
通常我习惯将版本指定为父pom中的属性,让模块pom从那里读取它。有没有办法让pom.xml读取属性文件来读取版本?
答案 0 :(得分:0)
一些项目,例如spring-cloud 和 spring-boot,在“BOM”(物料清单)中表达它们的“发布序列”(一组依赖项及其已知可以很好地协同工作的版本)。 BOM 只不过是一个 POM,只有一个 dependencyManagement 部分,其中所有这些依赖项都列出了正确的版本。然后将该 BOM 包含在每个项目的 POM 中,该 POM 应遵循其依赖项管理部分中的这些依赖项/版本,范围为“导入”。
例如
您创建了单独的项目“my-bom”,其中仅包含一个像这样的 pom:
<project>
<groupId>your.organication.program</groupId>
<artifactId>my-bom</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.whatever</groupId>
<artifactId>somedependency</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.whatever</groupId>
<artifactId>someotherdependency</artifactId>
<version>4.5.6</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
然后您将其包含在应与这些依赖项/版本保持一致的每个项目中:
groupId>your.organication.program.project</groupId>
<artifactId>some-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>your.organisation.program</groupId>
<artifactId>my-bom</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencyManagement>
在项目中,有效使用的依赖项仍然必须在依赖项部分中引用,但没有版本 - 版本由 BOM 管理。