2

语境:

我有一个多模块 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/ 一个更全球性的问题,使用的方法是否正确?或者它是一种反模式用法?在这种情况下,应该有什么替代方案?

谢谢你。

4

2 回答 2

1

对我来说,您的方法看起来像是一种反模式。我建议只将项目放在要一起发布的同一层次结构中。具有不同发布生命周期的项目应该独立存在 - 否则您将继续遇到您提到的问题。如果您从根目录(多模块设置)运行发布插件,该根目录的所有内容都将在 SVN 中标记。

在您的情况下,我可能会创建以下层次结构:

  • 每个客户类型一个
  • 根据您的结构,每种类型可能有一个捆绑它们(zip)

我会按照您创建版本的方式对其进行分组。这可能意味着您必须运行发布插件几次而不是只运行一次,例如在 Core 中进行更改时,但它会干净得多。

然后,您的打包项目将引入所有依赖项并打包/组装它们。

如果你有通用的配置选项,我建议把它们放到一个通用的parentpom.xml 中。这不一定是你的根(多模块)pom。

于 2013-03-22T12:22:52.993 回答
0

您是否尝试使用-r参数+要发布的所有模块的列表运行 maven-release-plugin?

基本上,此参数允许您指定应执行 maven 命令的模块列表。(如果你省略它:所有子模块都将包括在内,这是默认行为)

在此处查看有关此命令行的更多详细信息。

我从不尝试将它与 maven-release-plugin 一起使用,我不知道它是否会起作用,尤其是在 SCM 操作方面。

于 2013-03-22T16:08:37.067 回答