Maven内部库pom版本管理

标签 maven maven-3

是否有任何工具和/或最佳实践可以帮助管理跨许多依赖项目的大量内部库版本。请允许我详细说明一下,

假设您有产品 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/

相关文章:

java - 带有客户端 Artifact 的 ejb - 运行时依赖性?

Eclipse 禁用自动源生成文件夹的警告

java - 动态设置 Maven Surefire JVM 类路径

java - 资源 URI 在 tomcat 8 服务器上的 Java RESTful Web 服务中不起作用

java - jersey-spring3 (2.25.1) 在 jetty-9.3.3 中产生 "Failed startup of context"错误

java - 使用 Maven 执行主类并保存输出

java - 如何确保每个 ejb-client 都有一个 ejb-impl(在耳朵里)?

Maven 存储库 URL 超时,构建将永远进行

maven - 为什么maven会下载很多相同依赖的版本?

eclipse - Maven eclipse :eclipse fail to execute