新的本地git存储库中的多模块maven项目?

时间:2013-05-23 14:25:02

标签: eclipse m2eclipse egit

昨天和今天我将我的eclipse juno项目转换为eclipse中的多模块maven项目。我有一个'pom-root'类型的maven项目,我所有的其他项目都是模块。模块将根项目作为父项。这可以正常工作。

几个小时前,我确实尝试将根项目添加到egit,只需右键单击根项目并选择共享项目 - >例如:It。

我首先在新目录中创建了一个新的存储库,结果是我的所有模块项目都变空了,所有源文件都被复制到了存储库目录。很高兴我确实看到了这一点,并且可以通过复制文件轻松恢复。

接下来尝试失败后,我尝试在项目的父文件夹中创建存储库。这种方式失败了,根项目变得腐败了。经过大量的摆弄,我删除了腐败的根项目并创建了一个新的类型'pom-root',不知怎的,我设法让所有东西再次运行。

接下来我浏览了stackoverflow(:-))并问我的问题:

如何将我的多模块maven项目放在新的本地git存储库中? (不丢失或腐败一切)

1 个答案:

答案 0 :(得分:3)

摘要:删除Eclipse项目(只是他们的元数据,而不是他们的内容),然后通过从本地仓库导入它们来重新创建它们。

警告:我正处于“一点知识是一件危险的事情”阶段,所以要怀疑地对待这件事。

我刚刚完成了这个,我想我有一个解决方案/解决方法。

我认为问题在于,大多数Eclipse仍然没有嵌套在其他项目中嵌套的项目。当您共享根项目时,EGit将所有项目文件从Eclipse工作区移出到本地git repo中,然后更新了根项目的Eclipse元数据以反映文件的新位置(好),但是(因为它是对嵌套项目毫无头绪)这意味着它处理了子模块中的所有文件,好像它们是你的根项目的一部分,因此将它们移动到git repo中(没关系)但没有为这些子模块更新Eclipse项目元数据(那很糟)。所以Eclipse显示你现在有一堆(子)项目没有任何文件(甚至没有.project文件,也没有pom.xml)。但是如果你忽略Eclipse并直接查看git repo的工作目录,那么他们都会愉快地坐在那里(即EGit复制了目录结构和所有文件,包括子模块),从git的角度来看,它们目前都未被跟踪

解决方案(我相信)是:删除Eclipse项目。不完全是。但非常小心;见下文。 [为了安全起见,可能会使用,例如zip以获取位于repo工作目录中的可爱文件的备份副本。如果他们已经上演或承诺,这将没有实际意义,但可能在这一点上他们不是]。

当您选择每个Eclipse项目并右键单击“删除”时,请确保未选中“删除磁盘上的项目内容(无法撤消)”复选框 - 换句话说,您正在删除每个项目的Eclipse元数据(我为所有子模块甚至根项目执行了此操作)但您没有删除位于repo工作目录中的文件。

(我担心m2e可能太“有用”了,当我删除每个子模块时,它可能会从父pom.xml中删除它,但幸好这似乎没有发生。)

在团队的Eclipse首选项 - Git - Projects中,我确实启用了“位于git存储库中的自动共享项目”。这样可以让生活更轻松,但我认为如果您愿意,可以使用较少的自动化方法。

删除所有相关的Eclipse项目后,使用Git Repositories视图导入Maven项目;这将创建新的Eclipse项目(对于根项目和子模块),其中包含指向repo中文件的有效元数据。哈利路亚。

我相信这是有效的,因为Eclipse的一部分对嵌套项目一无所知是m2e中的import-maven-projects逻辑。

此时所有文件仍未跟踪,因此接下来您可能要选择根项目并右键单击Team - >添加到索引(它还将添加所有子模块,我假设因为它对嵌套项目没有任何意义,只是将它们视为根项目中的额外文件)。

我想知道如果我再添加一个新的子模块会发生什么 - 它会“正常工作”(并在git repo中共享)还是需要更多的旋转?我很高兴地发现(据我所知)它“正常工作”:Eclipse项目元数据显示了正确位置的文件(在git repo中,作为根项目下的子项)并将项目标记为在git中分享。

所以我的猜测是,如果你或我有一台时间机器,那么简单的方法就是创建根Maven项目,将其分享给EGit,然后才开始创建子Maven模块。

我的环境(尽管可能没关系): Eclipse 4.3.1(Kepler SR1)及其组件的常用版本:m2e 1.4.0,EGit 3.0.3,m2e EGit连接器0.14.0。