我们在SVN中有以下项目结构,其中父项(非聚合器)项目定义了常见配置。父母是单独管理和释放的。
trunk
+parent
pom.xml
+project1
pom.xml
+project1_1
pom.xml
+project1_2
pom.xml
+project2
pom.xml
基本上每个真实项目(project1,project2)都用作其子项目的聚合器。常用配置设置(Java编译器版本,其他插件)保存在父级中,在所有项目(project1,project2)中用作Maven parent
。
我想在父母中定义的一个设置是Subversion的SCM URL,例如父pom.xml中的http://svnhost/base/trunk/parent
。
当我这样做时,各个项目继承此设置,但当然不反映路径的相对性质。在 project1 中,这已解析为http://svnhost/base/trunk/parent/
- 我已使用mvn help:effective-pom
进行了检查。
有没有办法指定SCM连接,以便相对于父级解析?或者我是否必须在每个项目中提供SCM URL?
答案 0 :(得分:3)
如果您使用${svn.host}
和${svn.path}
等属性来构建scm.url,则应该可以。发布插件有一个错误,其中属性在发布期间被替换:http://jira.codehaus.org/browse/MRELEASE-128但是从版本2.3开始,似乎是修复的。因此,您的孩子poms只定义属性,但不再定义scm url。
我不知道这是否有帮助。你没有在pom.xml中保存太多的行,并且你引入了人们不会改变属性的危险。
如果在父级中定义parent.scm.url的属性,然后在子级中使用该属性,则添加相对URL(<scm.url>${parent.scm.url}/../myproject</scm.url>
)
如果你根据该属性在scm.url中执行相对路径,你仍然不会保存很多配置吗?
我认为你确实希望你需要编写一个读取parent-url的插件,然后从当前工作副本中读取url(因为maven不知道在哪里找到该项目url,因为它未配置)然后计算它的相对路径。我认为这只是一个但很奇怪,只需在每个pom中重复scm.url配置。
答案 1 :(得分:2)
在多模块构建中,您只需要在项目的根级别定义scm连接。但是您的项目布局看起来不像是正确的设置。为什么不将父/ pom.xml直接放在trunk文件夹下?如果你需要单独释放父母,这表明父母真的是一个单独的在线maven项目。