2012-12-11 18 views
1

我有两个多模块项目。一个是主项目树。另一个项目树从第一个项目中引入工件(WAR,JAR等)。他们每个人都有自己独立的家长团队。在项目A发布时更新项目B中的依赖关系

我想保持其版本号相同。项目2有一个依赖项管理部分,其中包含来自项目1的工件。这个问题是因为快照而无法发布项目。

例如。版本号(对于两个项目)是3.4-SNAPSHOT。我可以发布项目1的3.4版本,所有的POM版本将从3.4-SNAPSHOT设置为3.5。当我进入项目2时,我想要做同样的事情。顺便说一下,项目1的依赖关系在3.4-SNAPSHOT,我不知道如何自动将它们设置为3.5。这就像我希望在实际发布之前将依赖关系更新到发布版本。

据我所知,如果我让两棵树从同一个父pom扩展,maven release插件会检测作为子模块的依赖关系并自动更新它们。

我读了一点关于versions plugin,但我不喜欢使用最新版本的一部分(它似乎危险)。更新属性看起来很有前途,但在第二次粗略的看起来,它看起来像使用最新版本的插件打包略有不同。

此外,我尝试了使用${project.version},但这基本上与将3.4-SNAPSHOT放入作为依赖关系相同 - 它会错误地表明它不能由于快照而释放,因为该版本实际上尚未更新。

+0

我并不是说你的错,但似乎有点奇怪,他们都应该有相同的版本,但不同的父母。 。 。 – chad

+0

它与包装有关。 Project 2基本上是一个项目,它将我们的工件捆绑到可部署的项目中。 Exes,rmsms,vms等我想最终我们希望把他们全部置于同一父母之下,但这是一个比我目前可以解决的更大的变化。 – tfecw

+0

我们有一个类似的用例,即我们有构建的罐子和战争,然后是一堆二进制安装程序和类似的东西。我们最初也试图让他们都拥有相同的版本号,因为它们都是同一个“产品”的一部分,这似乎是有意义的。我们现在正在逐步为每一个作品提供自己的版本,以使它们更具独立性。这是一个复杂的故事。 。 。而且我们还没有清理到足以考虑自动化发布,唉。 – chad

回答

1

正如你承认的,这里的正确答案是重新安排你的项目有一个共同的父母。其他任何只是一种解决方法。

但是,它在我看来像versions:use-releases可能实现您的目标。您可以指定包含列表以确保只更新项目1依赖关系。

如果您希望这是自动的,您可以考虑将此目标绑定到 compile之前的 lifecycle phases之一。

编辑:可悲的是,这看起来不可能。至少,这是我通过页面顶部提到的“直接调用只执行”的理解。

+1

谢谢邓肯,我发现这个:http://maven.40175.n5.nabble.com/release-process-and-SNAPSHOT-upgrade-td3409242.html哪些内容有一些很好的见解。 – tfecw

1

你配置项目的方式是完全独立的。您可能会要求您的log4j依赖项的版本与您当前的项目B版本相同。

虽然它不会自动执行,但应该替换项目B中项目A的所有引用的版本,以便使用在父项目中为项目B定义的属性。然后,当您释放项目A时,只需要更改一个POM,因此project.a.version属性现在是发布版本而不是SNAPSHOT。 B发布后,您可以将其更改回${project.version}以保持同步。

+1

谢谢,正如链接中提到的,我回应邓肯琼斯的帖子,可能有办法做你已经建议使用maven调用者插件的建议。否则,我会把一堆竹脚本放在一起来完成类似的事情。 – tfecw