Eclipse + Subversion (subclipse) + Maven (m2eclipse) 多模块项目

Posted

技术标签:

【中文标题】Eclipse + Subversion (subclipse) + Maven (m2eclipse) 多模块项目【英文标题】:Eclipse + Subversion (subclipse) + Maven (m2eclipse) multi-module project 【发布时间】:2011-05-02 13:26:01 【问题描述】:

我有一些相关的遗留项目一团糟,我想将它们作为一个在 subversion 上共享的多模块项目(第一个多模块项目,我们一直将它们分开)。有几个关键部分 1) Web 服务,2) 各种 Swing 客户端,3) 模型(带休眠的持久性),4) 核心 JSE 任务。

几天来,我一直在尝试使用 Eclipse (Helios)、Maven (2.2.1)、m2eclipse (0.10.0) 和 Subversion (1.6) 为我们的团队正确设置它。我一直在难倒自己或出现随机错误,迫使我回溯。我希望有人可以帮助我提供一些最佳实践。

以下是一些问题:

m2eclipse 需要一个“扁平”的 eclipse 项目结构。这是否意味着我应该为每个模块创建一个颠覆存储库?如果我做一个存储库并尝试从父项目签入,我很难在嵌套项目目标(和其他)目录上设置 svn:ignore 属性。

如果我为每个存储库做一个模块,我似乎可以检查它们。那么问题是通过子剪辑检查的最佳方法是什么?有最好的顺序吗?首先是父项目还是子项目?我是否需要签出父项目并将子项目的签出路径修改为嵌套在文件目录中,这样我就可以从父项目中“全新安装”?

或者,我应该放弃 subclipse 和 m2eclipse 并结帐并从命令行运行我的 maven 目标。

或者,我应该只是使用与 Maven 的 SCM 集成。或者,甚至可能根本不尝试设置多模块项目。

其他人是做什么的?有没有人有一些文档(我错过了)或一些链接(谷歌不推荐)?

提前感谢您的反馈。

【问题讨论】:

【参考方案1】:

m2eclipse 需要一个“扁平”的 eclipse 项目结构。

嗯,m2eclipse 支持嵌套项目 AFAIK(或至少导入嵌套项目结构)。我不使用 Eclipse 向导来创建我的项目,所以也许我不知道什么。

这是否意味着我应该为每个模块创建一个颠覆存储库?

不,不,绝对不会,我不会那样做(这很难维护)。但是,根据您的项目发布周期,您可能需要考虑存储库的布局(单个与多个主干/标签/分支),特别是如果您计划使用 maven 发布插件。如果某些部分有独立的发布周期,那么我会选择几个主干/标签/分支。如果您总是一起发布它们(作为单个产品),那么应该使用单个主干/标签/分支来完成。我写了几个可能感兴趣的主题的答案:

Migrating to maven from an unusual svn directory structure? Maven parent pom vs modules pom How to handle maven versions in a multi module project?

如果我创建一个存储库并尝试从父项目签入,我很难在嵌套项目目标(和其他)目录上设置 svn:ignore 属性。

具体问题是什么?

如果我为每个存储库做一个模块,我似乎可以检查它们。那么问题是通过子剪辑检查的最佳方法是什么?有最好的顺序吗?首先是父项目还是子项目?我是否需要签出父项目并将子项目的签出路径修改为嵌套在文件目录中,这样我就可以从父项目中“全新安装”?

无论您做出何种选择(是否有多个存储库,是否有多个主干/标签/分支),都应该可以一次性检查整个项目结构(如果需要,请使用svn:externals)。至少,您应该尝试使其成为可能(确实如此,请参阅上面发布的链接)。

但我再说一遍,我不建议使用多个存储库(除非您想要独立的修订号),没有什么能强迫您这样做。

或者,我应该放弃 subclipse 和 m2eclipse 并结帐并从命令行运行我的 maven 目标。

我成功地使用了 Eclipse、m2eclipse、subclipse,都很好地集成了(至少对于构建和“签入”部分而言)。但我在命令行上进行初始导入和初始结帐,然后导入

或者,我应该只是使用与 Maven 的 SCM 集成。

我不使用它,我不需要它。

或者,也许甚至不尝试设置多模块项目。

没有理由禁止使用多模块项目设置,multi-modules builds 是 Maven 的关键部分之一。

其他人是做什么的?有没有人有一些文档(我错过了)或一些链接(谷歌不推荐)?

看看我发布的链接:)

【讨论】:

谢谢!我会检查这些链接。如果我共享父项目,我可以成功 svn:ignore 目标、.settings、.classpath 等,都在父项目中。子项目都有 svn:ignore 灰显。修改后,我可以 svn:ignore 子项目的唯一方法是对父项目进行完全提交,然后删除我要忽略的子项目中的目录,然后提交,然后 svn:ignore 选项是可用,我可以忽略它们以备将来提交。你也注意到了吗?再次感谢您提供信息丰富的回复。【参考方案2】:

一开始有点棘手。我通常看到它的设置方式是这样的:

在颠覆中:

- Parent Project
-- Module A
--- pom.xml (module A)
-- Module B
--- pom.xml (module B)
-- Module c
--- pom.xml (module C)
-- pom.xml (parent project)

一些注意事项(你已经知道了):

您必须拥有子项目 在您的父级中列为模块 项目 你必须列出父项目 在您孩子的 pom 中(作为父母 组、工件、版本) 当您从 svn,你需要做'check out as maven 项目”而不是 标准“结帐”(这个可以是 一个陷阱)

我希望这会有所帮助。

【讨论】:

附带说明,您需要从 M2Eclipse 更新站点 -m2eclipse.sonatype.org/sites/m2e-extras 添加“用于 Subclipse 的 Maven SCM 处理程序”,以显示“作为 maven 项目签出”选项。 @Croydon - 这很有趣。这就是为什么它在 Indigo 中不能开箱即用的原因。我敢打赌不包括额外内容 - 谢谢!

以上是关于Eclipse + Subversion (subclipse) + Maven (m2eclipse) 多模块项目的主要内容,如果未能解决你的问题,请参考以下文章

eclipse 添加subversion管理svn

恢复 Eclipse subversion 项目连接

eclipse Subversion Native Library Not Available

eclipse svn org.tigris.subversion.javahl.ClientException: RA layer request failed

是否有一个 Eclipse 插件可以让您在多个 Subversion 修订中区分单个 Java 方法?

Subversion非递归签出