这是通过创建链接的模块(单独的Git仓库)来分离整体Maven项目的一种方法

时间:2018-10-20 16:15:18

标签: git maven

我的整体项目具有以下结构,这是客户的要求:

\
 +--modules/module1
 |             \--pom.xml
 |
 +--modules/module2
 |             \--pom.xml
 |
 +--modules/main-web-module
 |             \--pom.xml
  \pom.xml

客户希望将所有这些模块都嵌入,因此就Maven工件而言,该项目变得单一。但是我需要module1module2在其他几个项目中共享。

我无法在<scm>module1 POM中指定module2部分,因为这些模块属于同一单个存储库。因此,我失去了执行mvn release将模块部署到Artifactory的可能性。

我不确定是否可以将module1module2作为Git子模块/子树链接到其他存储库,因为它们的POM始终引用父POM。

我的结论错误吗? 关于如何实现所需的任何想法?

2 个答案:

答案 0 :(得分:0)

最好的选择是为每个模块使用单独的存储库,并使用maven-dependecy组合它们,或者根据需要甚至制作一个uber jar

但是由于您无法创建单独的存储库,因此建议您尝试以下操作。

  1. 将每个模块的packaging设为JAR
  2. 构建项目并push jars to nexus
  3. 现在,您可以将其他特定项目中的特定模块作为依赖项包含在推送到nexus的版本中。

答案 1 :(得分:0)

正如单词所暗示的,模块模块化之间(与 monolithic 相比)有很强的关系:

                  |      Module       |
                  | Tagging | Sharing |
 -----------------+---------+---------+
             Repo |   YES   |    -    |
     Modular      |         |         |
              JAR |    -    |   YES   |
 -----------------+---------+---------+
             Repo |   NO    |    -    |
  Monolithic      |         |         | 
              JAR |    -    |   NO    |
 -----------------+---------+---------+

几十年来,强烈建议不要使用整体设计。我无法想象为什么仍然要坚持这一点。

我希望您可以说服客户,整体设计通常是糟糕的设计。如果没有:运行! ;)

更新

我可以想到一个肮脏的hack,在所有项目中都有一个回购协议,并且可能对每个项目进行单独标记是根据分支创建(尽管由于对可怜的滥用Git的衷心同情,我从不推荐这样做):

                        tag B  
main (master) --+---------o--------------
                |\  tag A          tag E   
      module1   | +---o--------------o---
                |\          tag C
      module2   | +-----------o----------
                 \              tag D
   web-module     +---------------o------

...和永不再次将其中任何一个与main (master)合并。