在项目A发布时更新项目B中的依赖项

时间:2012-12-11 17:06:59

标签: maven maven-release-plugin

我有两个多模块项目。一个是主项目树。另一个项目树从第一个项目中提取工件(WAR,JAR等)。他们每个人都有自己独立的父母pom。

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

例如。版本号(两个项目)都是3.4-SNAPSHOT。我可以发布项目1的3.4版本,所有的pom版本将从3.4-SNAPSHOT设置为3.5。当我进入项目2时,我想做同样的事情。问题是项目1的依赖关系是3.4-SNAPSHOT,我无法弄清楚如何自动将它们变为3.5。就像我希望在实际发布之前将依赖项更新到发布版本。

据我所知,如果我从同一个父pom中扩展两个树,maven发布插件会将依赖项检测为子模块并自动更新它们。

我读了一点关于versions plugin的内容,但我不喜欢它的使用最新版本部分(似乎有点危险)。 Update-properties看起来很有希望但是在第二次粗略看来,它看起来像use-latest-versions插件包装略有不同。

另外,我尝试使用${project.version},但这与将3.4-SNAPSHOT作为依赖项基本相同 - 它会因为快照而无法释放,因为版本实际上还没有已更新。

2 个答案:

答案 0 :(得分:1)

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

但是,我认为versions:use-releases可能会达到您的目标。您可以指定包含列表以确保仅更新项目1依赖项。

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

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

答案 1 :(得分:1)

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

虽然它不是自动的,但您应该替换项目B中项目A的所有引用的版本,以使用在项目B的父pom中定义的属性。然后,当您发布项目A时,必须更改一个pom,以便project.a.version属性现在是已发布的版本而不是SNAPSHOT。在B发布后,您可以将其更改回${project.version}以使其保持同步。