我有一个由几个模块和子模块组成的Maven项目。 我使用SVN来版本化源文件。
如何在POM文件的scm属性中指定相对于其父级的URL。
某些模块及其子模块共享一个公共版本号/发布过程,有些模块使用独立的模块/发布过程。对于具有独立版本号的模块,我已经设置了分支/主干/标签布局,让发布插件很开心。
为此,我在我的存储库中有两个SVN布局。一个包含所有主干/分支/标签混乱,另一个包含一个干净的准备结账工作目录,其中svn:对引用的外部引用。
这看起来像这样;你有真实世界的SVN布局,主干/分支/标签混乱:
- pom.xml (主要的父母)
- 的 utils的
- 分支
- 标记
- 躯干
- pom.xml ,src,target等...
- 数据模型(已发布)
- 分支
- 标记
- 躯干
- 的pom.xml
- 的 LIB
- pom.xml ,src,target等...
- 服务器
- pom.xml ,src,target等...
- 的客户端
- pom.xml ,src,target等...
- 的仓模块
- bin-module-1 (已发布)
- 分支
- 标记
- 躯干
- pom.xml ,src,target等...
- bin-module-2 (已发布)
- 分支
- 标记
- 躯干
- pom.xml ,src,target等...
工作区的干净布局,用“svn:externals”标签隐藏树枝/树干的东西:
- pom.xml (主要的父母)
- utils ( - > utils / trunk )
- pom.xml ,src,target等...
- 数据模型( - > 数据模型/主干)
- 的pom.xml
- 的 LIB
- pom.xml ,src,target等...
- 服务器
- pom.xml ,src,target等...
- 的客户端
- pom.xml ,src,target等...
- 的仓模块
- 的pom.xml
- bin-module-1 ( - > bin-module-1 / trunk )
- pom.xml ,src,target等...
- bin-module-2 ( - > bin-module-2 / trunk )
- pom.xml ,src,target等...
到目前为止,这么好。
我在父POM中设置了根SCM URL,Maven正确地暗示了子模块的URL。
我已使用mvn help:effective-pom
我有以下scm网址:
但Maven并不知道实际的SVN布局。 我希望看到:
为此,我需要将 scm 部分添加到数据模型的pom.xml
, 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路径?
非常感谢任何帮助,建议。
提前致谢, 圣拉斐尔
答案 0 :(得分:5)
我原以为这有效:
<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个子模块的值。