从一个不寻常的svn目录结构迁移到maven?

tan*_*ens 4 java svn refactoring maven-2 release-management

与'普通'svn目录结构相反,我使用以下结构:

trunk/
  project1/
  project2/
  project3/
  ...
branches/
  project1-branch/
    project1/
    project2/
    ...
  project2-branch/
    project1/
    project2/
    ...
tags/
  project1/
    V1
    V2
    ...

如您所见,我没有为每个项目单独的三元组(主干/分支/标签).

对于开发,我会检查包含我需要的所有项目的主干(有时是稀疏结账)(项目之间存在依赖关系,而某些项目只是库).

我在这里看到的好处是:

  • 更新和签入很简单,因为我有一个所有项目的公共根目录(主干).一个简单svn updatesvn commit全部.

  • 创建标签或分支很简单,因为它只是我必须拥有的主干svn copy.(分支和标签实际上包含的项目比需要的多,但是它svn copy很便宜,如果需要,我仍然可以在分支或标签上进行稀疏检查.)

  • 将资源从一个项目移动到另一个项目很容易,因为它们都存在于同一个存储库中.

  • 当我正在完全检查主干时,全局重构(例如更改常用类的包)很容易,因为我可以确定我不会错过任何项目.

  • 合并很容易,因为即使从一个项目到另一个项目的重构移动,我总是可以立即合并整个分支.


我打算迁移到maven并将所有项目从trunk转移到maven项目.我想从maven依赖管理和可用的插件中受益(现在我正在使用巨大的自定义ant文件).

现在我的问题是:

  • 我是否必须更改svn目录结构以为每个项目提供自己的三元组(主干/分支/标签)?我猜答案是'是'.

  • 如果我改变结构,我会松开上面提到的哪些好处(我的意思是用maven做什么会更复杂)?

  • 用maven做同样的方法是什么?

Pas*_*ent 13

没有这样的东西,一个"正常"的svn目录结构.有在讨论不同的方法被称为"规划你的版本库组织"一节中的版本控制使用Subversion的书(甚至是/trunk,/tags,/branches名称只是约定,有一个标签与分支没有区别,只是在你对他们的看法) .


  • 我是否必须更改svn目录结构以为每个项目提供自己的三元组(主干/分支/标签)?我猜答案是'是'.

不,你不.例如,请参阅Apache ServiceMix源代码树:它是一个多模块maven项目,但模块在一个项目下trunk.另一方面,XWiki 不是单一产品,而是源代码库页面中详述的产品和项目生态系统,它有许多主干/分支/标签.您可以在此处浏览其存储库以了解布局.

但是选择一种方法或另一种方法不仅仅是品味问题,它实际上取决于您的发布周期(mvn release稍后会详述).如果项目中的组件共享相同的版本(la ServiceMix),我只使用一个中继.如果他们有一个独立的发布周期(la XWiki),我会使用多个"trunk/tags/branches"结构,就像这个线程中描述的那样:

myrepo
  + .links (2)
    + trunks
      + pom.xml
  + parent-pom (1)
    + trunk
      + pom.xml
  + project-A
    + trunk
      + pom.xml
  + project-B
    + trunk
      + pom.xml 
Run Code Online (Sandbox Code Playgroud)

1)项目的父POM有自己的发布周期.每个组件的POM都将它用作父级(简单地用groupId和 引用artifactId,否relativePath).对于版本,您必须首先释放父POM.

2)这是一种结构,可以轻松检查项目的特定分支,即通常是主干.subversion用户检出myrepo/.links/trunk以获取所有源的头版.诀窍是,该目录包含外部链接(即具有 svn:externals属性)到该项目的所有其他模块的中继(parent-pom,project-A,project-B).此目录中的pom.xml永远不会发布,它只包含三个模块的模块部分,以启用多模块构建.使用此构造,您可以轻松设置分支,例如:

myrepo
  + .links
    + branch-2.x
      + pom.xml
Run Code Online (Sandbox Code Playgroud)

我已多次使用此设置,它运行良好.

  • 如果我改变结构,我会松开上面提到的哪些好处(我的意思是用maven做什么会更复杂)?

让我逐一回答每一点.

  • svn externals更新和签入很容易.一个简单svn updatesvn commit全部.

  • 创建标记或分支很简单,因为maven发布插件将为您处理(标记和分支将更清晰).

  • 将资源从一个项目移动到另一个项目看起来并不复杂.

  • 全局重构(例如更改常用类的包)很容易,因为您仍然可以完全检查主干.

  • 合并可能不那么容易.但是你真的经常将课程从一个项目转移到另一个项目吗?

  • 用maven做同样的方法是什么?

如果需要,使用maven发布插件和svn外部的建议布局之一.