2

我们所有的项目都是使用 maven 构建的。我们将一些主要配置集中在一个超级 pom 中。

为了始终拥有这个超级 pom 的更新版本(无需修改版本),我们使用了以下语法:

<parent>
    <groupId>my.organization</groupId>
    <artifactId>superPom</artifactId>
    <version>RELEASE</version>
</parent>

问题是 Maven Eclipse 插件 (m2e) 不理解此语法(未解析 RELEASE 常量)。所以,我们的 Eclipse 用户不能使用内置编译。

你有什么建议来克服这个问题?

顺便说一句,我们从 maven 的角度尝试了几个选项(尤其是这里描述的那些),但是 version.RELEASE 对每个人来说都是最简单的(除了那些使用 Eclipse 的人)。

编辑:我们的项目源在多个 SVN 存储库中拆分。这个超级 pom 是一个独立的项目。它是通过我们的 Nexus 服务器检索的。

4

2 回答 2

3

你正试图走向错误的方向。maven 中的发布是一个特定版本,如 1.0.0,它表明您已定义该工件的状态。在您的情况下,您的超级 pom 具有特定的状态。如果您尝试将版本定义为“RELEASE”,您是在说我的版本始终相同,但实际上并非如此。

通常这样的超级 pom 会随着时间的推移而改变,比如说今天你已经在其中定义了一些特定的依赖版本(dependencyManagemet)。明天你改变那些定义。现在 1.000.000 美元的问题是在今天完成的构建中使用了超级 pom 的哪个状态?好的,在那个简单的场景中,您可以回答问题,但如果您昨天某个时候更改了超级 pom,您将无法准确回答问题。

此外,如果您尝试重新创建比方说上周的工件,您无法说出在那个特定时间使用了超级 pom 的哪个确切状态,因为您没有让您有机会看到它的指示器。

这就是您需要 1.0.0 或 1.1.0 等真实版本的原因。

我强烈建议使用真实版本,如 1.0.0 等,但不要使用诸如“RELEASE”之类的东西,它会在 Maven 系统中使用其相关组、工件和版本。

于 2012-09-11T15:03:02.130 回答
2

版本范围和扩展确实不适用于父工件

有人建议调用版本插件:

mvn versions:update-parent 

这不能完全满足您的需求,但恐怕没有更好的解决方法。其他想法:使用 SNAPSHOT 父 pom(我承认不是很满意)。另请参阅Maven2 cannot find parent from relative path

于 2012-09-11T15:32:40.830 回答