【问题标题】:How to configure maven or eclipse in order to use the RELEASE constant within versions?如何配置 maven 或 eclipse 以便在版本中使用 RELEASE 常量?
【发布时间】:2012-09-11 13:47:59
【问题描述】:

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

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

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

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

你有什么建议来解决这个问题?

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

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

【问题讨论】:

    标签: eclipse maven m2e


    【解决方案1】:

    你正试图走向错误的方向。 release in maven is a particular version like 1.0.0 表示您已定义该工件的状态。在您的情况下,您的超级 pom 具有特定的状态。如果您尝试将版本定义为“RELEASE”,您是在说我的版本始终相同,但实际上并非如此。

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

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

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

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

    【讨论】:

    • 我完全同意你关于如何使用版本的观点。我实际上必须处理这种情况。
    • 我认为,我的解释不够准确:超级 pom 约束来自发布管理团队。内容仅与 RM(存储库,...)相关。我不在乎此配置是否更改。但我不希望开发人员花时间更新这个超级 pom 的版本。我们尝试了快照解决方案(如 Yanflea 所述),但 RM 人员在测试他们的新配置时多次破坏了我们的构建。
    • @Arno,你说父 pom 是一个独立项目,来自发布管理团队,我无法想象这会如何工作。父 pom 可能很简单,但它是多模块项目的一部分(在构建时成为特定工件 groupId:artifact:version,类型为 pom,与 jar 或战争工件没有区别),它不是一个配置文件应由 elease 管理团队管理。
    【解决方案2】:

    版本范围和扩展确实可以not work for parent artifacts

    有人建议调用版本插件:

    mvn versions:update-parent 
    

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

    【讨论】:

      猜你喜欢
      • 2012-08-28
      • 1970-01-01
      • 2013-01-26
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多