语境:
我有一个多模块 Maven 项目,如下所示:
根----模块A
ModuleB
ModuleC
ModuleD
.......
它们在 Root 下大约有 25 个模块:
- 其中一些代表应用程序的核心(5 个模块)
- 其余的每个模块都代表与客户类型相关的业务流程实现。这些模块彼此完全独立。
打包或发布“根”项目时,生成的工件是单个 ZIP 文件,其中聚合了与“根”模块相关的所有 JAR。
单个 ZIP 文件是根据程序集描述符生成的,它表示交付工件。
在目标环境上部署时,单个 ZIP 被解压缩到一个目录下,由一个“引擎”使用(加载类),这是一个提供最终服务的 Java Web 应用程序。
约束
- 一方面的“业务限制”,
- 并且愿意减少另一边不同版本之间的回归
上述约束导致我们采用以下发布场景:
我们要么释放 Root 及其所有子模块。这意味着生成的 ZIP 将聚合具有相同版本的所有子模块 JAR。ZIP 将包含类似于以下内容的内容:[ModuleA-1.1.jar、ModuleB-1.1.jar、ModuleC-1.1.jar、ModuleD-1.1.jar、.......、ModuleX-1.1.jar]。
或者我们发布 Root 和它的几个子模块,我们想要重新更新的那些。生成的 ZIP 将聚合所有子模块 JAR :已发布的子模块将与最后发布的版本聚合,未发布的子模块将与另一个“适当的”版本聚合。例如,如果我们进行这样的增量发布,ZIP 将包含类似于 [ModuleA-1.2.jar, ModuleB-1.1.jar, ModuleC-1.2.jar, ModuleD-1.1.1.jar, ..... ..,ModuleX-1.1.2.jar]。
这两种情况是通过以下方式实现的:
- 对于第一个场景,将模块声明为MAVEN MODULES 'module'
- 或者将模块声明为第二个场景(增量场景)的MAVEN DEPENDENCIES '依赖' 。
问题
这两种情况都运行良好,但是当我们处于第二种情况(增量)时,maven-release-plugin:prepare 正在将所有模块 [ModuleA、ModuleB、ModuleD、....ModuleX] 上传到 SCM(svn),它正在上传已发布和未发布的,而“未发布的模块”在 pom 中被声明为“依赖项”而不是“模块”。
1/ 有没有办法避免上传“未发布”的模块?有没有办法向 SCM svn 提供程序注入“排除目录列表”?
2/ 一个更全球性的问题,使用的方法是否正确?或者它是一种反模式用法?在这种情况下,应该有什么替代方案?
谢谢你。