6

我们在 SVN 中有以下项目结构,其父(非聚合器)项目定义了通用配置。父级是单独管理和释放的。

trunk
    +parent
        pom.xml
    +project1
        pom.xml
        +project1_1
            pom.xml
        +project1_2
            pom.xml
    +project2
        pom.xml

所以基本上每个真实项目(project1,project2)都被用作其子项目的聚合器。parent通用配置设置(Java 编译器版本、其他插件)保存在父级中,在所有项目(项目 1、项目 2)中用作 Maven 。

我想在父级中定义的设置之一是 Subversion 的 SCM URL,例如http://svnhost/base/trunk/parent在父级 pom.xml 中。

当我这样做时,单个项目会继承此设置,但当然不会反映路径的相对性质。在project1中,这已解决http://svnhost/base/trunk/parent/- 我已经用mvn help:effective-pom.

有没有办法指定 SCM 连接,以便相对于父级解决?还是我必须在每个单独的项目中提供 SCM URL?

4

2 回答 2

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 中执行相对路径,您仍然不会节省太多配置?

我认为确实想要你想要你需要编写一个插件来读取父 url,然后从当前工作副本中读取 url(因为 maven 不知道在哪里可以找到该项目 url,因为它没有配置) 然后从中计算相对路径。与在每个 pom 中重复 scm.url 配置相比,我认为这很奇怪。

于 2012-10-30T17:42:37.863 回答
2

在多模块构建中,您只需在项目的根级别定义 scm 连接。但是您的项目布局看起来并不正确。你为什么不把你的 parent/pom.xml 直接放在树干文件夹下?如果您需要单独释放父级,这表明父级确实是一个独立的在线 maven 项目。

于 2012-10-30T16:27:35.010 回答