gpt4 book ai didi

version-control - SCM URL 相对于 POM 中的父 SCM URL

转载 作者:行者123 更新时间:2023-12-04 15:15:33 29 4
gpt4 key购买 nike

我有一个由几个模块和子模块组成的 Maven 项目。
我使用 SVN 对源文件进行版本控制。
短篇小说
如何在 POM 文件的 scm 属性中指定与其父文件相关的 URL。
漫长的故事
一些模块及其子模块共享一个共同的版本号/发布过程,一些使用独立的。对于具有独立版本号的模块,我设置了一个分支/主干/标签布局,以便发布插件满意。
为此,我的存储库中有两个 SVN 布局。一个包含所有的主干/分支/标签困惑,另一个包含一个干净的准备结帐的工作目录,其中包含 svn:external 对主干的引用。
这看起来像这样;您拥有真实世界的 SVN 布局,主干/分支/标签困惑:

  • pom.xml (main parent)
  • utils
    • branches
    • tags
    • trunk
      • pom.xml, src, target, etc...
  • data-model (released)
    • branches
    • tags
    • trunk
      • pom.xml
      • lib
        • pom.xml, src, target, etc...
      • server
        • pom.xml, src, target, etc...
      • client
        • pom.xml, src, target, etc...
  • bin-modules
    • bin-module-1 (released)
      • branches
      • tags
      • trunk
        • pom.xml, src, target, etc ...
    • bin-module-2 (released)
      • branches
      • tags
      • trunk
        • pom.xml, src, target, etc...

以及工作目录的干净布局,用“svn:externals”标签隐藏分支/主干的东西:
  • pom.xml (main parent)
  • utils (-> utils/trunk)
    • pom.xml, src, target, etc...
  • data-model (-> data-model/trunk)
    • pom.xml
      • lib
        • pom.xml, src, target, etc...
      • server
        • pom.xml, src, target, etc...
      • client
        • pom.xml, src, target, etc...
  • bin-modules
    • pom.xml
    • bin-module-1 (-> bin-module-1/trunk)
      • pom.xml, src, target, etc ...
    • bin-module-2 (-> bin-module-2/trunk)
      • pom.xml, src, target, etc...

到现在为止还挺好。
我已经在我的父 POM 中设置了根 SCM URL,并且 Maven 正确地暗示了子模块的 URL。
我已经用 mvn help:effective-pom 进行了检查
我有以下 scm 网址:
  • : [根网址]
  • 实用程序 : [root-url]/utils
  • 数据模型 : [root-url]/data-model/
  • 数据模型/库 : [root-url]/data-model/lib
  • 数据模型/客户端 : [root-url]/data-model/client
  • 数据模型/服务器 : [root-url]/数据模型/服务器
  • bin-module-1 : [root-url]/bin-module-1/
  • bin-module-2 : [root-url]/bin-module-2/

  • 但是 Maven 不知道实际的 SVN 布局。
    我希望它看到:
  • : [根网址]
  • 实用程序 : [root-url]/utils/trunk
  • 数据模型 : [root-url]/data-model/trunk
  • 数据模型/库 : [root-url]/data-model/trunk/lib
  • 数据模型/客户端 : [root-url]/data-model/trunk/client
  • 数据模型/服务器 : [root-url]/data-model/trunk/server
  • bin-module-1 : [root-url]/bin-module-1/trunk
  • bin-module-2 : [root-url]/bin-module-2/trunk

  • 为此,我需要在 pom.xml 中添加一个 scm 部分。数据模型,bin-module-1 和 bin-module-2。
    我尝试过类似(对于数据模型):
    <scm>
    <connection>./data-model/trunk</connection>
    <developerConnection>./sdr/trunk</developerConnection>
    <url>./sdr/trunk</url
    </scm>
    或者
    <scm>
    <connection>${project.parent.scm.connection}/data-model/trunk</connection>
    <developerConnection>${project.parent.scm.developerConnection}/data-model/trunk</developerConnection>
    <url>${project.parent.scm.url}/data-model/trunk</url>
    </scm>
    但似乎没有一个工作。属性 ${...} 甚至没有被替换。
    那么,如何覆盖相对于其父 SCM URL 的 SCM 路径?
    任何帮助,建议,将不胜感激。
    提前致谢,
    拉斐尔

    最佳答案

    我会认为这有效:

    <scm>
    <connection>${project.parent.scm.connection}/data-model/trunk</connection>
    <developerConnection>${project.parent.scm.developerConnection}/data-model/trunk</developerConnection>
    <url>${project.parent.scm.url}/data-model/trunk</url>
    </scm>

    如果没有,仍然可以通过编程方式分配这些值(我将使用 GMaven 来执行此操作,但您也可以使用 antrun 插件或编写自定义插件)

    首先,设置一个属性
    <properties>
    <relativeScmPath>data-model/trunk</relativeScmPath>
    </properties>

    然后为所有 SCM 属性分配一个相对偏移量:
    <plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>gmaven-plugin</artifactId>
    <version>1.3</version>
    <executions>
    <execution>
    <id>assign-scm</id>
    <phase>validate</phase>
    <goals>
    <goal>execute</goal>
    </goals>
    <configuration>
    <source>
    <![CDATA[
    def parentScm = project.parent.scm;
    def thisScm = project.scm;
    def relPath = project.properties['relativeScmPath'];
    ['connection','developerConnection','url'].each{
    thisScm[it] = parentScm[it] + relPath;
    }
    ]]>
    </source>
    </configuration>
    </execution>
    </executions>
    </plugin>

    您可以将其添加到根 pom 并对其进行更改,使其仅在找到该属性时才运行,然后您可以通过简单地将属性添加到它们来自动设置 n 个子模块的值。

    关于version-control - SCM URL 相对于 POM 中的父 SCM URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4875833/

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