相对于父级的Maven SCM URL

时间:2012-10-30 16:00:44

标签: svn maven

我们在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?

2 个答案:

答案 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项目。