2010-12-14 55 views
12

我目前有大约16个项目,我用maven部署到组成类似“门户”的相同应用程序服务器。我已经构建了一个父pom来处理常见的依赖和插件配置。目前,我的SVN结构看起来类似于:多模块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 

不过,现在所有的项目更改都将在标签文件夹跟踪。这对我来说不是一个大问题,但分枝现在似乎变成一种痛苦。

我目前也在努力将TeamCity连接到这里,因为我只需要看一个单独的目录(例如标签)来捕捉需要构建的所有东西,现在这会更容易一些。我也将工件部署到企业Nessus存储库。

我希望有人能给我一些建议,因为我一直无法找到任何体面的文档,谈论整个生命周期和最佳实践。

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

回答

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> 

儿童的项目可以选择依赖。

以下链接还可以帮助:

+0

这完全解决了我的问题!谢谢! – Casey 2010-12-14 19:46:03

+0

如果要在子项中使用父项目,请确保将父数据作为依赖项添加。 – cevaris 2013-12-09 18:40:15

4

约翰斯的方法的一个变化是使用svn:externals挂钩适当的主干/标签/你的子项目在树枝上您父项目的适当中继线/标记/分支。通过这种方式检查你的父母的一个变体会取出所有其他项目的正确版本。

只有在合理检查所有项目的情况下才有意义。

+0

对我的方法发表评论会更有帮助,而不仅仅是默默无闻地退缩。考虑到这种方法在过去的四年中一直在帮助我们处理几个客户特定的版本,同时最大限度地减少代码差异,所以我有兴趣知道我一直在做错什么。 – 2013-10-18 08:31:07

+1

我认为svn:externals真的很聪明,特别是在大型企业svn回购站。这样,您可以根据需要将Maven目录布局绑定在一起,而无需更改整个回购结构。 – Sylar 2015-09-09 07:59:54