Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从不寻常的svn目录结构迁移到maven?_Java_Svn_Maven 2_Refactoring_Release Management - Fatal编程技术网

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

Java 从不寻常的svn目录结构迁移到maven?,java,svn,maven-2,refactoring,release-management,Java,Svn,Maven 2,Refactoring,Release Management,与“普通”svn目录结构相反,我使用以下结构: trunk/ project1/ project2/ project3/ ... branches/ project1-branch/ project1/ project2/ ... project2-branch/ project1/ project2/ ... tags/ project1/ V1 V2 ... 树干/ 项目1/ 项目2/ 项目3

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

trunk/ project1/ project2/ project3/ ... branches/ project1-branch/ project1/ project2/ ... project2-branch/ project1/ project2/ ... tags/ project1/ V1 V2 ... 树干/ 项目1/ 项目2/ 项目3/ ... 分支机构/ 项目1分部/ 项目1/ 项目2/ ... 项目2分部/ 项目1/ 项目2/ ... 标签/ 项目1/ V1 V2 ... 正如您所看到的,我没有为每个项目提供单独的三元组(主干/分支/标记)

对于开发,我对包含我需要的所有项目的主干进行签出(有时是稀疏签出)(项目之间存在依赖关系,有些项目只是库)

我从中看到的好处是:

  • 更新和签入很容易,因为我有一个所有项目的公共根目录(主干)。一个简单的
    svn更新
    svn提交
    就可以完成这一切

  • 标记或分支的创建很简单,因为只有主干需要
    svn复制
    。 (分支和标记实际上包含的项目比需要的多,但是
    svn副本
    很便宜,如果需要,我仍然可以对分支或标记进行稀疏签出。)

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

  • 全局重构(例如更改常用类的包)在我处理主干的完整签出时很容易,因为我可以确保我不会错过一个项目

  • 合并很容易,因为我总是可以一次合并整个分支,即使从一个项目到另一个项目进行重构


我打算迁移到maven,并将所有项目从主干项目拆分到maven项目。我想从maven依赖项管理和可用插件中获益(现在我正在使用巨大的定制ant文件)

现在我的问题是:

  • 我是否必须更改svn目录结构,为每个项目提供自己的三元组(trunk/branchs/tags)?我想答案是肯定的

  • 如果我改变了结构,我会失去上面提到的哪些好处(我的意思是,用maven做这件事会更复杂些什么)

  • 使用maven的等效方法是什么

如果您只想将Maven用于依赖项管理,并且您认为您的项目结构已经足够好了/对您来说运行良好,那么这里有一个有用的提示:忘记Maven。

Maven不仅仅是一个依赖关系管理工具,它称自己为“软件项目管理和理解工具”,这显然涵盖了依赖关系,但也涵盖了许多其他基础。因为您只想进行依赖关系管理,所以至少应该看看这样一个工具,它仅用于管理依赖关系

Ivy的真正好处是,与Maven相比,您可以更好、更细粒度地处理依赖关系管理,同时保留现有的项目结构、构建脚本以及在其上构建的任何内容。Ivy并不强化任何项目结构或配置模式,它允许您定义希望从依赖关系管理工具中获得的内容,然后将其添加到项目中,而不是强迫您的项目在结构上成为象牙塔中某些人所陈述的内容

为了进一步帮助您做出决定,以下是双方的相互比较:

  • -记住也要阅读评论
    • 没有“正常”的svn目录结构。正如本书第四部分所讨论的,有不同的方法(即使是
      /trunk
      /tags
      /branchs
      名称都只是约定,标记和分支之间没有区别,除了你对它们的感知)


      • 我是否必须更改svn目录结构,为每个项目提供自己的三元组(trunk/branchs/tags)?我想答案是肯定的
      不,你不必非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得非得。例如,请参见:这是一个多模块maven项目,但模块位于一个
      主干下。另一方面,XWiki并不是一个单一的产品,而是一个产品和项目的生态系统,如其页面所述,它有许多主干/分支/标记。您可以浏览其存储库以了解布局

      但是,选择一种或另一种方法不仅仅是品味的问题,它实际上取决于您的发布周期(更多信息请参见
      mvn release
      )。如果项目中的组件共享同一版本(la ServiceMix),我将只使用一个主干。如果它们有一个独立的发布周期(la XWiki),我会使用多个“主干/标记/分支”结构,如中所述:

      1) 项目的父POM已 一个自己的发布周期。每一个 组件的POM将使用它作为父级 (仅使用
      groupId
      artifactId
      ,no
      relativePath
      )。对于 释放你必须释放 首先是父母

      2) 这是一个使 特定分支的轻松签出 该项目的一部分,即通常 大旅行箱subversion用户签出 myrepo/.links/trunk获取头部 修订所有来源。诀窍是,, 该目录包含的 外部链接(即与
      svn:externals
      属性)到 本系统所有其他模块的中继线 项目(母公司pom、项目A、, 项目B)。本文中的pom.xml 目录从未发布,它 只包含一个模块部分,用于 这三个模块用于启用多个 模块构建。用这种构造 您可以轻松地设置分支 e、 g:

      我已经用过很多次了,效果很好

      • 如果我改变了结构,我会失去上面提到的哪些好处(我的意思是,用maven做这件事会更复杂些什么)
      myrepo
        + .links (2)
          + trunks
            + pom.xml
        + parent-pom (1)
          + trunk
            + pom.xml
        + project-A
          + trunk
            + pom.xml
        + project-B
          + trunk
            + pom.xml 
      
      myrepo
        + .links
          + branch-2.x
            + pom.xml