Maven版本:准备用已解析的值覆盖SCM属性

时间:2010-09-10 09:33:15

标签: maven-2

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

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

  • 我会添加< scm>仅在我的公司 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>(而不必重新声明整个&lt; scm&gt;部分),例如:< / LI>
   <scm.module>sharktopus</scm.module>
   <scm.edition>trunk</scm.edition>

但我很快意识到我不能这样做:发布插件使用标记下一个版本重写每个POM SCM信息,因此每个这样的POM需要拥有&lt; scm&gt;部分。

很好,所以我决定将基本POM属性中的常见SCM细节存储起来,让每个项目根POM声明它的&lt; scm&gt;使用这些道具的部分,加上它自己的细节,例如:

<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必须拥有拥有&lt; scm&gt;包含硬编码网址的部分。

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

目前似乎没有解决方案:http://jira.codehaus.org/browse/MRELEASE-128