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

标签 maven-2

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

我有 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/

相关文章:

maven-2 - 是否可以修改 Maven 控制台输出以隐藏 [INFO] 日志记录?

java - 如何使用maven启动和停止jetty

java - 用于 Maven javadoc 生成的 UmlGraph 与 APIViz

maven-2 - 当打包( war )许多模块时(Maven),将两个或多个 persistence.xml 合并为一个

eclipse - 如何拒绝maven使用Eclipse中打开的项目而不是存储库中的jar

maven-2 - 我可以将单个文本文件打包为 Maven 存储库中的文本文件吗?

maven-2 - 如何将模块 jar 合并到 Maven2 中的单个 jar?

eclipse - 从 Eclipse 3.5 在 Tomcat 6 上运行 Spring + Maven2 项目时出现 ClassNotFoundException

java - 在 tomcat 中部署模型项目的最佳方法是什么

svn - 如何使用 Maven 从 SVN 标记创建分支?