目前,我有以下结构为我的项目Foo
:何处定义多模块Maven项目中的属性?
foo-parent
+- pom.xml
project-foo
+- pom.xml
+- module-1
| +- pom.xml
| +- ...
+- module-2
| +- pom.xml
| +- ...
+- ...
在foo-parent
,有pom.xml
定义为我的项目(基本依赖,插件管理等)所有的通用配置。 父项的外部化可以帮助我获得稳定的父配置(如果父项是根pom.xml
,则该项也用于聚合所有模块)。
的project-foo/pom.xml
是只有在这里聚合所有模块,并执行不定义任何父...
现在,我修改我的项目使用Maven插件发布。因此,我需要配置<scm>
信息。 但是,在把这个信息,因为它取决于其中代码位于所述分支(即<scm>
值是在躯干代码不同于在分支-X,或分支-Y) 。
- 解决方案#1在
foo-parent
项目定义<scm>
。这样,每个模块都会提供这些信息。不过,我会有几个版本的foo-parent
项目,每个分支一个。这将使这位家长非常困难的版本... - 解决方案#2定义在
foo-parent
项目<scm>
,但里面添加参数(如<scm>scm:svn:http://server/foo/${svn.branch}</scm>
)。但是,这只会解决问题:我在哪里定义svn.branch
属性? - 溶液#3定义在
project-foo/pom.xml
的<scm>
,现在将有foo-parent
作为母体,并改变所有子模块的<parent>
指向project-foo/pom.xml
(即foo-parent > foo-root > module-X
)。 - 解决方案#4在每个模块中定义
<scm>
(或svn.tag
属性)。不太喜欢那个... - 解决方案#5任何其他的想法?
我的观点是使用解决方案#3,但是你对此有何感想?
谢谢。
编辑(关于khmarbaise答案)
项目foo-parent
是在project-foo
子目录现实,但不是由project-foo/pom.xml
文件汇总。我说我“外化”它只是为了表明它与其他模块分开。主要的兴趣是尽量保持父母尽可能稳定,这就是为什么我试图将父母分离出聚集体的原因。但是,由于我广泛使用了Maven发布插件(不是在该项目上,而是在其他项目上),我认为最好不要在此轨道上继续,并合并所有foo-parent/pom.xml
,project-foo/pom.xml
中的所有foo-parent/pom.xml
。这将减轻我项目的管理。
感谢您的回答。我想我已经知道Maven是如何工作的,即使对于多模块也是如此,但正如我的版本所述,我试图“外化”父级“pom.xml”,这似乎不是一个好主意(至少在我的上下文中)。所以解决方案就是合并父集和聚集的pom。 – romaintaz 2012-03-06 13:58:24
为什么这不是一个好主意?正如我所描述的,只需从你的“super-pom”中创建一个单独的项目,并从中创建一个发行版(包括scm plus distributionManagement),而不是将它用作父项目的父项目,就这样吧。 – khmarbaise 2012-03-06 14:04:34
我想在我当前的上下文中,这不是一个好主意*。与根目录中的单个父聚合聚合pom相比,为单个多模块项目分配单独的pom并不是一个优势... – romaintaz 2012-03-06 14:42:00