是否有任何工具和/或最佳实践来帮助管理跨许多依赖项目的大量内部库版本。请允许我逃避,
假设您有产品A、B、C,这些产品依赖于库X、Y、Z,在这些库中也存在依赖关系。
在这个世界中,我们喜欢将所有版本保存在所有依赖项的最新发布版本上(除了工作副本之外,没有快照依赖项)。这允许我们在任何时候发布产品,并强制所有项目在CI (Hudson)中运行。
问题是要保持put.xml的所有最新版本。目前,我们使用一个定制的maven插件,作为每个版本的一部分,在SCM中搜索依赖于所发布的项目并对其进行更新的put.xml。这与版本-maven-插件类似,只不过您不需要每个项目的工作副本即可完成。
一定有更好的办法。其他团队对许多项目的共享库做了什么?组织这件事的最好方法是什么?在某些情况下,多模块可以工作,但是我们的大多数库都是相当独立的,并且被太多的其他项目所使用:(a)决定它将支持哪个多模块,(b)为此工作的层次结构。
发布于 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:
<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>发布于 2012-11-20 15:02:39
最接近的方法是使用依赖型版本范围,然后在配置文件中覆盖pom的存储库将快照更改为false,确保在发布时使用"-P“包含配置文件。
<dependency>
<groupId>a</groupId>
<artifactId>a</artifactId>
<version>[3.8,4.0)</version>
</dependency>..。
<profiles>
<profile>
<id>your-release</id>
<repositories>
<repository>
...
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</profile>
<profiles> 另一种模式是"bom“,您可以创建一个pom (打包: pom),它声明一个依赖项列表,以使管理变得更容易(减少更改)。
https://stackoverflow.com/questions/13475301
复制相似问题