gpt4 book ai didi

maven-2 - Maven 版本 :prepare overwrites SCM properties with resolved values

转载 作者:行者123 更新时间:2023-12-02 16:01:10 25 4
gpt4 key购买 nike

我认为这有点明显,但我仍然认为这是一个缺点......

我有 23 个 Mavenized 项目。我现在添加 位,因为我已经开始使用发布插件。这是我的思考过程:

  • 我将仅在我公司的 base POM 中添加 部分,并使用属性参数化 URL,例如
<scm>
<connection>${scmBaseConnection}/${scm.module}/${scm.edition}</connection>
<developerConnection>${scmBaseConnection}/${scm.module}/${scm.edition}</developerConnection>
<url>${fisheyeBaseUrl}/${scm.module}</url>
</scm>
  • 然后每个项目根(聚合器)POM 只需要声明其scm。 <properties>相应地(并且不必重新声明整个 部分),例如:
   <scm.module>sharktopus</scm.module>
<scm.edition>trunk</scm.edition>

但我很快意识到我不能这样做:发布插件使用标签下一个版本的重写每个POM SCM 信息,因此每个此类 POM 都需要其自己的 部分。

好吧,所以我决定将常见的 SCM 详细信息存储在基本 POM 属性中,并让每个项目根 POM 使用这些属性声明其 部分,以及其自己的具体信息,例如:

<scm>
<connection>${scmBaseConnection}/sharktopus/trunk</connection>
<developerConnection>${scmBaseConnection}/sharktopus/trunk</developerConnection>
<url>${fisheyeBaseUrl}/sharktopus</url>
</scm>

但这也不起作用,因为发布插件使用已解析值进行重写(事后看来,这很明显)。所以,例如对于发布标签 POM,上面的信息将被重写为:

<scm>
<connection>scm:svn:https://mysvnhost.net/sharktopus/tags/R1_NewStuff</connection>
<developerConnection>scm:svn:https://mysvnhost.net/sharktopus/tags/R1_NewStuff</developerConnection>
<url>https://mysvnhost.net/sharktopus</url>
</scm>

这意味着每个 POM 必须有其自己的 部分,其中包含 硬编码 URL

  • 每个人都会这么做吗?
  • 如果您的 SCM 网址发生变化,会发生什么情况 - 您是否只是在所有项目中搜索/替换?
  • 是否是对发布插件的功能请求,要求重写部分 URL,例如保留属性引用,但覆盖“最终”细节?

最佳答案

定义 scm 部分的唯一位置是项目根目录而不是公司根目录。在多模块构建中,只需要一个 scm 部分。发布插件会替换属性的原因很简单。发布后,这些 pom 必须代表该软件的状态。如果它们具有属性,则不可能保证正确的值等。因此结果将无法重现......如果 SCM URL 更改,它将仅对新项目有效,而对旧项目无效,因为它们已经部署等。

关于maven-2 - Maven 版本 :prepare overwrites SCM properties with resolved values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3683543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com