我的整体项目具有以下结构,这是客户的要求:
\
+--modules/module1
| \--pom.xml
|
+--modules/module2
| \--pom.xml
|
+--modules/main-web-module
| \--pom.xml
\pom.xml
客户希望将所有这些模块都嵌入,因此就Maven工件而言,该项目变得单一。但是我需要module1
和module2
在其他几个项目中共享。
我无法在<scm>
和module1
POM中指定module2
部分,因为这些模块属于同一单个存储库。因此,我失去了执行mvn release
将模块部署到Artifactory的可能性。
我不确定是否可以将module1
和module2
作为Git子模块/子树链接到其他存储库,因为它们的POM始终引用父POM。
我的结论错误吗? 关于如何实现所需的任何想法?
答案 0 :(得分:0)
最好的选择是为每个模块使用单独的存储库,并使用maven-dependecy
组合它们,或者根据需要甚至制作一个uber jar
。
但是由于您无法创建单独的存储库,因此建议您尝试以下操作。
packaging
设为JAR
。push jars to 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)
合并。