我认为这有点显而易见,但我仍然认为这是一个缺点......
我有23个Mavenized项目。我现在正在添加< scm>因为我已经开始使用发布插件了。这是我的思考过程:
<scm> <connection>${scmBaseConnection}/${scm.module}/${scm.edition}</connection> <developerConnection>${scmBaseConnection}/${scm.module}/${scm.edition}</developerConnection> <url>${fisheyeBaseUrl}/${scm.module}</url> </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;包含硬编码网址的部分。
答案 0 :(得分:3)
定义scm部分的唯一地方是项目根目录而不是公司根目录。在多模块构建中,只需要一个scm部分。 release插件将替换属性的原因非常简单。发布后,这些pom必须代表该软件的状态。如果它们具有其中的属性则保证相关值等是不可能的。因此结果将不可重现...... 如果SCM URL更改,它将仅对新项目有效,而对旧项目无效,因为它们已经部署等。
答案 1 :(得分:1)
目前似乎没有解决方案:http://jira.codehaus.org/browse/MRELEASE-128