为Maven构建Git存储库的最佳方法


19

我需要一些有关如何在Git中构建项目的建议。我们使用Java,而Maven是我们的构建工具。Maven kinda假定您所有项目最终都有一个共同的祖先。当事情没有完全按照Apache基金会设置项目的方式进行设置时,Maven可能也是真正的戏剧女王(使用发行插件的任何人都可能知道我在说什么)。

我们想要一个用于控制插件版本和构建配置(仓库配置,要构建的工件,命名约定,插件版本等)的顶级父pom。Maven希望我们所有的IT项目都在该主项目的子文件夹中。这意味着该组织需要进行大量的Git回购。

这将导致非常嘈杂的环境。如果有两个团队从事不相关的项目,那么他们将不得不不断地从另一个团队引入合并。理想情况下,我希望每个项目有一个仓库。

但是,这种情况与Maven的极其分层的模型存在冲突,后者要求子项目是子文件夹。

我需要一些有关人们如何协调这两种模型的建议...谢谢!


Answers:


19

您有2个选择:
1.通过git方法:使用子模块。这是git如何管理子模块git子模块的文档。我个人没有使用它,但是它看起来可以解决您的问题。
2.通过maven方式:在maven中,并非强制要求根项目(配置)成为所有项目的父目录。您可以具有这样的结构:

configuration
 +-- pom.xml (configuration:XXX)
project1
 +-- pom.xml (project1:1.0-SNAPSHOT)
 !
 +-- module11 
 !     +-- pom.xml (1.0-SNAPSHOT)
 +-- module12
       +-- pom.xml (1.0-SNAPSHOT)
project2
 +-- pom.xml (project2:2.0-SNAPSHOT)
 !
 +-- module21 
 !     +-- pom.xml (2.0-SNAPSHOT)
 +-- module22
       +-- pom.xml (2.0-SNAPSHOT)

配置,project1和project2在同一目录级别,每个目录可以是一个git存储库。在构建project1或project2时,您从project1或project2级别运行maven命令,并且maven将尝试从maven存储库而不是从父目录中获取父(配置)。您应该注意版本。我建议在project1或project2中保留对具有发布版本的父项(配置)的引用。要发布版本,您必须分两个步骤进行操作:首先发布配置,然后发布项目。Project1和project2可以独立发展,并且不必具有与父代相同的配置版本。

仅在特殊情况下,当您想同时使用SNAPSHOT版本的配置和项目时,在project1或project2中,您可以使用<relativePath>标记里面的<parent>标记指向您的本地配置路径。我不建议这样做,因为这会在开发环境中造成问题(至少对我来说是在Eclipse中)

我为我的英语道歉。


3

Maven希望我们所有的IT项目都在该主项目的子文件夹中

不,Maven只是希望能够检索其所需的工件。最好的方法是使用工件存储库,例如NexusArtifactory。每个项目可以有自己的Git存储库。

我们需要一个顶级父pom来控制插件版本和构建配置(存储库配置,要构建的工件,命名约定,插件版本等)

这是你真正的问题。使用父POM来强制执行配置是有意义的,但是没有理由将配置与构建控制结合起来。实际上,除了一个独立的多模块项目外,我要说这是一个非常糟糕的主意,仅出于您陈述的原因(加上您必须构建所有项目,时间)。


我非常熟悉maven的工作原理。不,我不希望我的团队构建整个代码库。通常,您会选择少量项目并将其退出源代码管理。我们有一台服务器来托管完成的工件,因此没有理由构建整个代码库。一旦您的组织达到一定规模,在共享基础架构上运行就可以节省资金。拥有中央配置来执行此操作是确保每次都能正常运行的唯一方法。
乔纳森·费舍尔

亲爱的@parsifal请有视力在我的问题有关创建Java多层应用程序stackoverflow.com/questions/49562268/...
Hosein Aqajani
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.