如何在Git for Eclipse中组织分层、模块化的Java项目?

如何在Git for Eclipse中组织分层、模块化的Java项目?,java,eclipse,git,Java,Eclipse,Git,我已经使用git子树和子模块玩了一段时间,但没有达到预期的效果。但让我们解释一下项目布局。首先是模块化Java项目。它由14个模块组成。(为了简单起见,我们称它们为MA、MB、MC等等)。由于Eclipse目前每个项目只能处理一个模块,因此每个模块都是一个单独的项目。复杂的部分就从这里开始:一些模块相互依赖。假设MA不依赖于任何东西,MB依赖于MA,MC也依赖于MA,MD依赖于MB,ME依赖于MC和MD(还有其他模块和依赖项,但仅解决这种情况就足够了)。要说明这一点,请查看以下内容: MA -x

我已经使用git子树和子模块玩了一段时间,但没有达到预期的效果。但让我们解释一下项目布局。首先是模块化Java项目。它由14个模块组成。(为了简单起见,我们称它们为MA、MB、MC等等)。由于Eclipse目前每个项目只能处理一个模块,因此每个模块都是一个单独的项目。复杂的部分就从这里开始:一些模块相互依赖。假设MA不依赖于任何东西,MB依赖于MA,MC也依赖于MA,MD依赖于MB,ME依赖于MC和MD(还有其他模块和依赖项,但仅解决这种情况就足够了)。要说明这一点,请查看以下内容:

MA -x
MB -> MA
MC -> MA
MD -> MB
ME -> MC, MD
超级项目实际上是一种启动器,包含所有Mx模块,从技术上讲,它也是一个Java模块(我们称之为MF)。在Eclipse的工作区中,所有这些MA-MF模块都作为单独的项目(在Project Explorer中以兄弟项目的形式可见)进行设置(通过EclipseJava构建路径),以适当地相互依赖。所以它看起来或多或少像:

Workspace:
+-- MA/
    +-- ...
+-- MB/
    +-- ...
...
+-- MF/
    +-- ...
我不愿意为这个项目创建Git存储库,因为我不确定这个项目的最终布局,但现在我解决了这个问题,我想添加所有这些模块来做VCS(即Git)。但我希望将每个Java模块维护为实际独立的存储库。然而,我希望自己签出MB或MC,并能够在中工作(请记住,这些依赖于MA,也应该以某种方式签出)。我想自己结帐给MD或我,然后做这些。但请注意,这些模块在层次上依赖于其他模块。MF(或其他未提及的模块)也是如此。我非常希望能够在FS层次结构的相同级别上检查它们,以满足Eclipse的要求。Eclipse当然可以处理嵌套的项目,并在平面视图中将它们显示为兄弟项目,但请注意MB和MC案例,它们都依赖于MA——我真的希望能够在这两个模块之间共享worktree(Git称之为工作树)(而不是在MB和MC下有两个单独的Git MA实例)

正如我在开始时提到的,我使用git子模块和子树玩了一段时间,但是我没能实现我的目标

我不介意项目设置是否复杂,是否只需完成一次。我不介意提交和推送(以及分支)是否需要稍微复杂的处理,并在执行时引起注意。(我不必使用EclipseGit插件,通过bash发出命令就可以了)


或者,我很高兴听到您如何处理git中模块之间具有多个依赖级别的模块化Java项目(以及如何使用Eclipse来管理这些项目)。

为了确保依赖项目能够组合在一起,它们应该位于同一个存储库中。或者,对模块进行版本设置,并按版本范围指定依赖项,而不是直接引用其他项目(更复杂)。模块是独立的,每个模块都有自己的依赖项。这就是为什么在一个项目中有多个模块是没有意义的。在大多数情况下,分层结构模块/项目是没有意义的(出于什么原因,您希望将多个模块分组?)。只要看看OSGi十多年来是如何做到这一点的,看看Java JRE模块——它们是分层的。它们可以依赖于相同的其他模块。这对我来说很有意义。JRE模块在哪里按层次分为子文件夹和子文件夹?在我看来,Java标准库的模块似乎位于同一级别的hg存储库中。例如,如果您有两个产品,您可能希望将模块组织为三个组/子文件夹:common和两个分别用于特定于产品的模块。然后会有第三种产品或重大结构变化,而之前的分组不再有意义。你只有14个模块。从简单开始。请仔细阅读我的问题,因为你肯定没有理解要点。依赖关系是分层的。布局不是(它是平面的)。我甚至画了一张简单的图表。我不知道,为什么你认为依赖关系与项目布局有关。没关系,可悲的是,你似乎无论如何都不能提供有用的提示。请不要再粗鲁了。如果您想将模块/项目放在单独的Git存储库中,您必须以其他方式确保没有人意外地在不同的版本上工作(例如,在一个存储库上进行拉取,而在另一个存储库上不进行拉取)。相反,在单个Git存储库中,提交是一个原子事务。使用独立的Git存储库比跨Git存储库的依赖性有什么好处?在Eclipse中,对于通过项目的依赖关系(顺便说一句,这些依赖关系不是分层的,而是非循环图),它们在FS中的位置无关紧要。为了确保依赖项目能够组合在一起,它们应该位于同一个存储库中。或者,对模块进行版本设置,并按版本范围指定依赖项,而不是直接引用其他项目(更复杂)。模块是独立的,每个模块都有自己的依赖项。这就是为什么在一个项目中有多个模块是没有意义的。在大多数情况下,分层结构模块/项目是没有意义的(出于什么原因,您希望将多个模块分组?)。只要看看OSGi十多年来是如何做到这一点的,看看Java JRE模块——它们是分层的。它们可以依赖于相同的其他模块。这对我来说很有意义。JRE模块在哪里按层次分为子文件夹和子文件夹?在我看来,Java标准库的模块似乎位于同一级别的hg存储库中。例如,如果您有两种产品,