2013-05-06 215 views
0

我的项目有10个左右的可重用组件,每个组件在其自己的存储库中独立版本化,但互相依赖进行构建。Maven&Nexus处理SNAPSHOT依赖关系

现在,每个组件都有自己的nexus SNAPSHOT存储库和用于夜间构建的自定义nexus组,因此我可以确定组件的每晚构建仅包含第三方和其所需的其他组件。具体而言,该组不会拥有组件自己的快照存储库。通过这种方式,我可以检测到一个jar被删除了,但我忘记清理一个pom依赖它。构建会中断,而不是默默地成功,因为它发现了一个旧的SNAPSHOT jar。

但是从管理的角度来看,这是一个巨大的痛苦,从我看到的关于公共联系库(和sonatype book)的观点是为一个团队或组织建立一个存储库,而不是每个组件。

有没有更好的方法来处理这个问题?有没有办法在组件pom中安装nexus黑名单,以便它不会尝试下载某些工件/组ID组合?

+0

是否所有这些组件都属于同一个项目? – khmarbaise 2013-05-06 18:56:14

+0

它们都用于更大的项目,但它们被设计成可重用的库。我们有多个使用1..n个组件的“项目”(如果您愿意的话,顶级项目)。 – Mark 2013-05-06 19:21:20

回答

0

pom中的黑名单是不可能的。我假设你的项目设置是错误的。

我会建议为您的项目创建一个多模块项目,其中包含所有模块(可重用组件)。

big-project (pom.xml) 
     +--- module1 (pom.xml) 
     +--- module2 (pom.xml) 
     +--- module3 (pom.xml) 
     +--- module4 (pom.xml) 
     .. 

,这将给你不维护的依赖性,特别是在不同的版本,并具有项目的一致性状态,因为你只有所有组件的单一版本一起,一个简单的解决方案来构建他们在一起的优势可以看到哪个组件(模块)与哪些版本的其他组件一起工作。

在您的设置中,真的很难知道哪个版本的哪个组件与特定版本的其他组件一起工作。

除了上面它可以更容易创建集成测试作为构建更简单,像这样的一部分:

big-project (pom.xml) 
     .. 
     +--- it-mod (pom.xml) 
     .. 

此外,您可以使用单独的模块(组件)从其他项目也是如此。

的关系采用不同的快照库没有意义,引起每一个组件应该有一个的groupId/artifactId的/版本的协调,以便否则,你有一个维护地狱,你有有经验的版本库,你可以使用一个快照库。

+0

不幸的是,这是不可能的。在我们的例子中,moduleX是一个独立的应用程序......它存在于大项目之外的它自己的应用程序中。我们不希望把它放在同一个maven项目中,因此可以独立于其他模块开发它。 – Mark 2013-05-20 03:30:34