具有父pom和svn布局的多模块maven项目

时间:2010-12-14 16:42:36

标签: maven release-management

我目前有大约16个使用maven构建的项目,这些项目被部署到构成类似“门户”的同一个应用程序服务器。我已经构建了一个父pom来处理常见的依赖项和插件配置。目前,我的SVN结构与此类似:

portal_root
    +project1
        +tags
        +branches
        +trunk
    +project2
        .
        .
        .
    +projectn
    pom.xml

各个项目均单独部署。也就是说,project1没有对project2的依赖,每个都可以修改和部署,而无需修改任何其他内容。

这给SVN带来了一个问题,好像另一个开发人员想要查看整个“门户”根(也获得父pom),他们默认情况下也会删除所有标签和分支的副本!不太理想。

我唯一能想到的就是使用这样的东西:

 portal_root
     +tags
     +branches
     +trunk
         +project1
              +src
              pom.xml
         +project2
             .
             .
             .
         pom.xml

但是,现在所有项目更改都将在tags文件夹中进行跟踪。这对我来说不是一个大问题,但现在分支似乎变得很痛苦。

我目前正在努力将Teamcity连接到这个中,这样现在会更容易一些,因为我只需要观察一个目录(例如标签)来捕获需要构建的所有内容。我还将工件部署到企业Nessus存储库。

我希望有人可以在这里给我一些建议,因为我无法找到任何体面的文档来讨论整个构建生命周期和最佳实践。

我喜欢能够使用单个maven命令构建和部署所有项目的想法。我还喜欢在一个地方拥有所有常见的依赖项,存储库信息和插件信息。

2 个答案:

答案 0 :(得分:25)

您可以使用以下布局:

+parent-project
  pom.xml
+child-project-1
  pom.xml
+child-project-2
  pom.xml

在父项目pom中添加:

<modules>
    <module>../child-project-1</module>
    <module>../child-project-2</module>
</modules>

在儿童项目中,pom补充说:

<parent>
    <artifactId><!-- parent artifactId --></artifactId>
    <groupId><!-- parent groupdId --></groupId>
    <version><!-- parent version --></version>
    <relativePath>../parent-project</relativePath>
</parent>

儿童项目可以选择依赖。

以下链接也可能有所帮助:

答案 1 :(得分:4)

JohnS方法的一个变体是使用svn:externals将子项目的相应主干/标签/分支挂钩到父项目的相应主干/标签/分支。通过这种方式,检查父项的一个变体将拉出其他项目的所有正确版本。

只有在一起检查所有项目时才有意义。