Rap*_*vet 6 version-control maven-2 maven
我有一个由几个模块和子模块组成的Maven项目.我使用SVN来版本化源文件.
如何在POM文件的scm属性中指定URL,这些属性与其父级的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的数据模型,仓模块-1和仓模块-2 .
我尝试过(对于数据模型):
<scm>
<connection>./data-model/trunk</connection>
<developerConnection>./sdr/trunk</developerConnection>
<url>./sdr/trunk</url
</scm>
Run Code Online (Sandbox Code Playgroud)
要么
<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>
Run Code Online (Sandbox Code Playgroud)
但似乎都没有效果.甚至没有替换$ {...}属性.那么,如何相对于其父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>
Run Code Online (Sandbox Code Playgroud)
如果没有,仍然有可能以编程方式分配这些值(我将使用GMaven来做到这一点,但你也可以使用antrun插件或编写自定义插件)
首先,设置一个属性
<properties>
<relativeScmPath>data-model/trunk</relativeScmPath>
</properties>
Run Code Online (Sandbox Code Playgroud)
然后为所有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>
Run Code Online (Sandbox Code Playgroud)
您可以将其添加到根pom并进行更改,使其仅在找到属性时运行,然后您可以通过简单地向其添加属性来自动设置n个子模块的值.