2010-09-28 140 views
1

我们的项目有一个像Maven的依赖管理

<dependency> 
    <groupId>apollo.components.cots</groupId> 
    <artifactId>cots-wfs</artifactId> 
    </dependency> 

而且据我了解,在Maven2将获得COTS的世界粮食首脑会议的最新神器的依赖,说<版本> 2.3-20101111.000000-13 < /版本>

的问题是,当我们分支项目,依赖关系保持不变,而当其他开发者发布一个新的婴儿床,WFS说<版本> 2.3-20101222.000000-13 < /版本>这是不BAC kward兼容,构建被破坏。

我试图避免将代码合并到分支中,这很痛苦。

那么当我分支项目时,我需要做些什么来“冻结”所有的依赖关系? 有没有简单的方法来做到这一点?

回答

4

而且据我了解,在Maven2将获得COTS的世界粮食首脑会议的最新神器,说<version>2.3-20101111.000000-13</version>

看起来你正在使用COTS的WFS一个SNAPSHOT依赖(2.3-SNAPSHOT),可能声明在dependencyManagement部分。

问题是,当我们分支项目时,依赖性保持不变,并且当其他开发人员发布不兼容的新cots-wfs(...)时,构建被破坏。

事实上,这就是为什么你应该简单地不分行SNAPSHOT依赖的神器,神器发布的构建应该是可重复的,直到永远,使用SNAPSHOT依赖击败这一点。 Maven发布插件实际上禁止发布具有SNAPSHOT依赖关系的POM。

然而,使用versions:lock-snapshots或更好地使用versions:use-releases来使用相应的发布版本来“锁定”SNAPSHOT依赖关系是可能的。这实际上是一条路。

顺便说一句,Maven Release Plugin可能有助于自动化整个过程。

+0

感谢您的意见。我将使用版本:锁定快照。使用发行版本的问题在于,它与最新代码非常不同,因为代码正在快速发展。所以我通常在主线上分支。 – portoalet 2010-09-30 14:46:12

0

从某种意义上说,分支意味着您正在创建它的新版本。提升版本号应该可以解决它。

+0

应该推广哪个版本号?如果我提升工件的版本号,那么依赖关系仍然不会被冻结,这意味着如果开发者发布新东西,那么在构建未来版本时会遇到问题 – portoalet 2010-09-28 12:41:49

0

是的,只需将版本标签添加到依赖项。如果您不确定当前版本号是什么,请运行“mvn help:effective-pom”以查看包含当前所有版本号的pom。

+0

Baijens,所以这意味着要修改所有依赖关系的版本标记? – portoalet 2010-09-28 12:46:29

+0

或复制整个有效的pom是这是很多工作给你。这种方式可能会导致一些不需要的配置。 – 2010-09-28 16:47:39