SCM URL 相对于 POM 中的父 SCM URL
我有一个由多个模块和子模块组成的 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-model、bin-module-1 和 bin- 的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我本以为这可行:
如果不行,仍然可以通过编程方式分配这些值(我将使用 GMaven 来做到这一点,但您也可以使用 antrun 插件或编写自定义插件)
首先,设置一个属性
然后为所有 SCM 属性分配一个相对偏移量:
您可以将其添加到根pom 并更改它,使其仅在找到该属性时才运行,然后只需将属性添加到 n 个子模块即可自动设置它们的值。
I would have thought that this works:
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
Then assign a relative offset to all SCM properties:
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.