首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven内部库pom版本管理

Maven内部库pom版本管理
EN

Stack Overflow用户
提问于 2012-11-20 14:27:11
回答 2查看 1.5K关注 0票数 2

是否有任何工具和/或最佳实践来帮助管理跨许多依赖项目的大量内部库版本。请允许我逃避,

假设您有产品A、B、C,这些产品依赖于库X、Y、Z,在这些库中也存在依赖关系。

在这个世界中,我们喜欢将所有版本保存在所有依赖项的最新发布版本上(除了工作副本之外,没有快照依赖项)。这允许我们在任何时候发布产品,并强制所有项目在CI (Hudson)中运行。

问题是要保持put.xml的所有最新版本。目前,我们使用一个定制的maven插件,作为每个版本的一部分,在SCM中搜索依赖于所发布的项目并对其进行更新的put.xml。这与版本-maven-插件类似,只不过您不需要每个项目的工作副本即可完成。

一定有更好的办法。其他团队对许多项目的共享库做了什么?组织这件事的最好方法是什么?在某些情况下,多模块可以工作,但是我们的大多数库都是相当独立的,并且被太多的其他项目所使用:(a)决定它将支持哪个多模块,(b)为此工作的层次结构。

EN

回答 2

Stack Overflow用户

发布于 2012-11-20 14:55:43

管理Maven中的依赖关系可以很好地处理dependencyManagement --我认为您对它很熟悉。您可以将此dependencyManagement外包给专用POM:所谓的BOM POM (参见http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html)。

在您的示例中,此BOM POM可能由您的产品A、B和C共享。由于这一事实,您应该定义一个Maven项目,该项目只包含此BOM POM和第三方软件X、Y和Z的所有依赖关系管理。该项目可以发布,您可以通过范围导入添加对BOM POM的依赖。

您的BOM POM:

代码语言:javascript
复制
<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的样品进口

代码语言:javascript
复制
<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>
票数 2
EN

Stack Overflow用户

发布于 2012-11-20 15:02:39

最接近的方法是使用依赖型版本范围,然后在配置文件中覆盖pom的存储库将快照更改为false,确保在发布时使用"-P“包含配置文件。

代码语言:javascript
复制
<dependency>
  <groupId>a</groupId>
  <artifactId>a</artifactId>
  <version>[3.8,4.0)</version>
</dependency>

..。

代码语言:javascript
复制
<profiles>
 <profile>
  <id>your-release</id>
  <repositories>
    <repository>
     ...
     <snapshots>
       <enabled>false</enabled>
     </snapshots>
    </repository>
  </repositories>
 </profile>
<profiles>  

另一种模式是"bom“,您可以创建一个pom (打包: pom),它声明一个依赖项列表,以使管理变得更容易(减少更改)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13475301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档