SCM URL 相对于 POM 中的父 SCM URL

发布于 2024-10-16 02:22:34 字数 4191 浏览 1 评论 0原文

我有一个由多个模块和子模块组成的 Maven 项目。 我使用 SVN 来对源文件进行版本控制。

短篇故事

如何在 POM 文件的 scm 属性中指定相对于其父文件的 URL。

长话短说

有些模块及其子模块共享公共版本号/发布过程,有些则使用独立的版本号/发布过程。对于具有独立版本号的模块,我设置了分支/主干/标签布局,以便发布插件满意。

为此,我的存储库中有两个 SVN 布局。一个保存所有的主干/分支/标签混乱,另一个保存一个干净的准备签出工作目录,其中包含对主干的 svn:external 引用。

这看起来像这样;你有真实世界的 SVN 布局,主干/分支/标签混乱:

  • pom.xml(主要父级)
  • 实用程序
    • 分支机构
    • 标签
    • 树干
      • pom.xml、src、目标等...
  • 数据模型已发布
    • 分支机构
    • 标签
    • 树干
      • pom.xml
        • pom.xml、src、目标等...
      • 服务器
        • pom.xml、src、目标等...
      • 客户
        • pom.xml、src、目标等...
  • bin 模块
    • bin-module-1已发布
      • 分支机构
      • 标签
      • 树干
        • pom.xml、src、目标等...
    • bin-module-2已发布
      • 分支机构
      • 标签
      • 树干
        • pom.xml、src、目标等...

以及工作目录的干净布局,用“svn:externals”标签隐藏分支/主干内容:

  • pom.xml(主要父级)
  • utils (->utils/trunk)
    • pom.xml、src、目标等...
  • 数据模型(->数据模型/主干
    • pom.xml
        • pom.xml、src、目标等...
      • 服务器
        • pom.xml、src、目标等...
      • 客户
        • pom.xml、src、目标等...
  • bin 模块
    • pom.xml
    • bin-module-1 (->bin-module-1/trunk)
      • pom.xml、src、目标等...
    • bin-module-2(->bin-module-2/trunk
      • pom.xml、src、目标等...

到目前为止,一切顺利。 我已经在父 POM 中设置了根 SCM URL,并且 Maven 正确暗示了子模块的 URL。 我已经使用 mvn help: effective-pom 检查了它,

我有以下 scm url:

  • root : [root-url]
  • utils : [root -url]/utils
  • 数据模型 : [root-url]/data-model/
  • data-model/lib : [root-url]/data-model/lib
  • 数据模型/客户端 : [root-url]/data-model/client
  • 数据模型/服务器 : [root-url]/data-model/服务器
  • bin-module-1 : [root-url]/bin-module-1/
  • bin-module-2 : [root-url]/bin-module-2/

但是 Maven不知道实际的 SVN 布局。 我希望它看到:

  • root : [root-url]
  • utils : [root-url]/utils/trunk
  • data-model : [root-url]/data-model/trunk
  • data-model/lib : [root-url]/data-model/trunk/lib
  • data-model/client : [root-url]/data-model/trunk/client
  • data-model/server : [root-url]/data-model/trunk/server
  • bin-module-1 > : [root-url]/bin-module-1/trunk
  • bin-module-2 : [root-url]/bin-module-2/trunk

为此,我需要添加一个 < em>scm 部分到 data-modelbin-module-1bin- 的 pom.xml模块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 路径?

任何帮助、建议,将不胜感激。

提前致谢, 拉斐尔

I have a Maven project made of several modules and sub-modules.
I use SVN to version the source files.

The short story

How do I specify URL in scm properties of a POM file, that are relative to the ones of its parent.

The long story

Some modules and their sub modules share a common version number / release process, and some use independant ones. For the module with independant version number, I have set up a branches/trunk/tags layout, for the release-plugin to be happy.

For that, I haveb two SVN layouts in my repository. One holds all the trunk/branches/tags mess, the other one holds a clean ready-to-checkout working directory with svn:external references to the trunks.

This looks like this; You have the real world SVN layout, with trunk/branches/tags mess:

  • 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...

And the clean layout of the working direcotry, hidding the branches/trunk stuff with "svn:externals" tags:

  • 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...

So far, so good.
I have set up the root SCM URLs in my parent POM, and Maven correctly implies the URLs for the sub-modules.
I have checked it with mvn help:effective-pom

I have the following scm urls:

  • root : [root-url]
  • utils : [root-url]/utils
  • data-model : [root-url]/data-model/
  • data-model/lib : [root-url]/data-model/lib
  • data-model/client : [root-url]/data-model/client
  • data-model/server : [root-url]/data-model/server
  • bin-module-1 : [root-url]/bin-module-1/
  • bin-module-2 : [root-url]/bin-module-2/

But Maven is unaware of the actual SVN layout.
I would like it to see :

  • root : [root-url]
  • utils : [root-url]/utils/trunk
  • data-model : [root-url]/data-model/trunk
  • data-model/lib : [root-url]/data-model/trunk/lib
  • data-model/client : [root-url]/data-model/trunk/client
  • data-model/server : [root-url]/data-model/trunk/server
  • bin-module-1 : [root-url]/bin-module-1/trunk
  • bin-module-2 : [root-url]/bin-module-2/trunk

For that, I need to add a scm section to the pom.xml of data-model, bin-module-1 and bin-module-2.

I have tried something like (for data-model) :

<scm>
    <connection>./data-model/trunk</connection>
    <developerConnection>./sdr/trunk</developerConnection>
    <url>./sdr/trunk</url
</scm>

Or

<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>

But none seem to work. The properties ${...} are not even replaced.
So, how do I override a SCM path, relative to its parent SCM URL ?

Any help, advice, would be much appreciated.

Thanks in advance,
Raphael

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷你仙 2024-10-23 02:22:34

我本以为这可行:

<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 个子模块即可自动设置它们的值。

I would have thought that this works:

<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>

If it doesn't, there's still the possibility to assign these values programmatically (I'll use GMaven to do that, but you can also use the antrun plugin or write a custom plugin)

First, set a property

<properties>
    <relativeScmPath>data-model/trunk</relativeScmPath>
</properties>

Then assign a relative offset to all SCM properties:

<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>

You could add this to the root pom and change it so that it runs only if it finds the property, and then you can automatically set the value for n sub modules by simply adding the property to them.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文