是否有任何工具和/或最佳实践可以帮助管理跨许多依赖项目的大量内部库版本。请允许我详细说明一下,
假设您有产品 A、B、C。 这些产品依赖于库 X、Y、Z,并且这些产品内部也存在依赖关系。
在这个世界上,我们希望将所有版本保留在所有依赖项的最新发布版本上(除了工作副本之外,没有快照依赖项)。这使得我们可以随时发布产品,并强制所有项目都在 CI(Hudson)中运行。
问题在于保持 pom.xml 是最新的。目前,我们使用自定义 Maven 插件,作为每个版本的一部分,在 SCM 中搜索依赖于正在发布的项目的 pom.xml 并更新它。这类似于 versions-maven-plugin只是您不需要每个项目的工作副本来完成此操作。
一定有更好的方法。其他团队如何处理多个项目中的多个共享库?组织这个事件的最佳方式是什么?多模块在某些情况下可以工作,但我们的大多数库都是相当独立的,并且被太多其他项目使用来(a)决定它属于哪个多模块以及(b)适用于此的层次结构。
最佳答案
在 Maven 中管理依赖关系与 dependencyManagement 配合得很好 - 我想你对它很熟悉。您可以将此依赖关系管理外包给专用的 POM:所谓的 BOM POM(请参阅 http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html )。
在您的情况下,此 BOM POM 可能由您的产品 A、B 和 C 共享。因此,您应该定义一个仅包含此 BOM POM 的 Maven 项目,以及第三方软件 X、Y 和 Z 的所有依赖项管理。该项目可以发布,您可以通过范围导入添加对 BOM POM 的依赖项。
您的 BOM POM:
<project>
<groupId>com.acme</groupId>
<artifactId>my-thirdparty-bom-pom</artifactId>
<version>1.0-SNAPSHOT</version>
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>...</groupId>
<artifactId>X</artifactId>
<version>...</version>
</dependency>
<dependency>
<groupId>...</groupId>
<artifactId>Y</artifactId>
<version>...</version>
</dependency>
<dependency>
<groupId>...</groupId>
<artifactId>Z</artifactId>
<version>...</version>
</dependency>
</dependencies>
<dependencyManagement>
...
</project>
项目 A 的示例导入
<project>
...
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.acme</groupId>
<artifactId>my-thirdparty-bom-pom</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>import</scope>
<dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>...</groupId>
<artifactId>Y</artifactId>
<!-- the version is managed by the thirdparty bom imported above -->
</dependency>
</dependencies>
...
</project>
关于Maven内部库pom版本管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13475301/