1

我有两个多模块项目。一是主项目树。另一个项目树从第一个项目中提取工件(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 发布插件会将依赖项检测为子模块并自动更新它们。

我阅读了一些关于版本插件的信息,但我不喜欢其中的 use-latest-versions 部分(这似乎很危险)。Update-properties 看起来很有希望,但粗略一看,它看起来像是打包的 use-latest-versions 插件略有不同。

此外,我尝试使用${project.version},但这与将 3.4-SNAPSHOT 作为依赖项基本相同 - 它会错误地说由于快照而无法发布,因为版本实际上尚未更新。

4

2 回答 2

1

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

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

于 2012-12-11T20:27:47.040 回答
1

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

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

如果您希望这是自动的,您可以考虑将此目标绑定compile.

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

于 2012-12-11T20:24:06.360 回答