我的项目有10个左右的可重用组件,每个组件都在自己的存储库中,独立地进行版本控制,但在构建时确实相互依赖。
现在,每个组件都有自己的nexus SNAPSHOT存储库和用于夜间构建的自定义nexus组,因此我可以确定组件的夜间构建只包括第三方和它需要的其他组件。具体来说,组将没有组件自己的快照存储库。通过这种方式,我可以检测到何时删除了一个jar,但我忘记清理对它的依赖。构建将中断,而不是静默地成功,因为它发现了一个旧的SNAPSHOT jar。
但是从管理的角度来看,这是一个巨大的痛苦,从我所看到的公共nexus存储库(和sonatype书籍)来看,这是一个团队或组织的单个存储库,而不是每个组件。
有更好的方法来处理这个问题吗?是否有一种方法可以在组件pom中安装nexus黑名单,以便它不会尝试下载某些工件/组id组合?
黑名单是不可能的。我猜你的项目设置是错误的。
我建议为您的项目创建一个多模块项目,其中包含所有模块(可重用组件)。
big-project (pom.xml)
+--- module1 (pom.xml)
+--- module2 (pom.xml)
+--- module3 (pom.xml)
+--- module4 (pom.xml)
..
这将给你的优势,只有一个版本的所有组件在一起,一个简单的解决方案来构建他们在一起,而不维护依赖关系,特别是在不同的版本,并有一个项目的一致性状态,因为你可以看到哪个组件(模块)与其他组件的哪个版本工作。
在您的设置中,很难知道哪个组件的哪个版本与特定版本的其他组件兼容。
除此之外,它使创建集成测试作为构建的一部分变得更简单,就像这样:
big-project (pom.xml)
..
+--- it-mod (pom.xml)
..
此外,您还可以使用来自其他项目的单独模块(组件)。
在nexus中使用不同的快照存储库是没有意义的,因为每个组件都应该有一个groupId/artifactId/version坐标,这样你就可以使用单个快照存储库,否则你就会有一个维护仓库的地狱,你有经验。