maven项目设计或反模式设计的良好方法

maven项目设计或反模式设计的良好方法,maven,maven-release-plugin,Maven,Maven Release Plugin,上下文: 我有一个多模块maven项目,看起来像: 根——模 根目录下大约有25个模块: 其中一些代表了应用程序的核心(5个模块) 其余的每个模块都表示与a类客户相关的业务流程实现。这些模块之间完全独立 打包或发布“Root”项目时,生成的工件是一个单独的ZIP文件,聚合了与“Root”模块相关的所有jar 单个ZIP文件是根据程序集描述符生成的,它表示交付工件 在目标环境上部署时,单个ZIP被解压到一个目录下,由一个“引擎”(提供最终服务的JavaWeb应用程序)使用(类加载) 约束 从

上下文:

我有一个多模块maven项目,看起来像:

根——模

根目录下大约有25个模块:

  • 其中一些代表了应用程序的核心(5个模块)
  • 其余的每个模块都表示与a类客户相关的业务流程实现。这些模块之间完全独立
打包或发布“Root”项目时,生成的工件是一个单独的ZIP文件,聚合了与“Root”模块相关的所有jar

单个ZIP文件是根据程序集描述符生成的,它表示交付工件

在目标环境上部署时,单个ZIP被解压到一个目录下,由一个“引擎”(提供最终服务的JavaWeb应用程序)使用(类加载)

约束

  • 从一个侧面看"业务约束",
  • 并且愿意减少不同版本之间的回归 另一边
上述约束导致我们采用以下发布场景:

  • 要么释放根,要么释放所有子模块。意思是 生成的ZIP将使用相同的 版本拉链将包含类似以下内容: [ModuleA-1.1.jar,ModuleB-1.1.jar,ModuleC-1.1.jar,ModuleD-1.1.jar, ……,ModuleX-1.1.jar]

  • 或者我们释放根和它的几个子模块,这些子模块是我们想要重新更新的。 生成的ZIP将聚集所有子模块JAR:已发布的子模块将与最后发布的版本聚合,未发布的子模块将与另一个“适当”版本聚合。 例如,如果我们进行了这样的增量发布,ZIP将包含类似于[ModuleA-1.2.jar、ModuleB-1.1.jar、ModuleC-1.2.jar、ModuleD-1.1.jar、, ……,ModuleX-1.1.2.jar]

这两种情况是通过以下方式实现的:

  • 第一次将模块声明为MAVEN modules'module' 情景
  • 或者将模块声明为MAVEN依赖项“dependency” 第二个场景,增量场景
问题

这两种方案都工作得很好,但是当我们在第二种方案(增量)中时,maven发布插件:prepare正在将所有模块[ModuleA、ModuleB、ModuleD、.ModuleX]上传到SCM(svn),它正在上传已发布和未发布的模块,鉴于“未发布模块”在pom中声明为“依赖项”,而不是“模块”

1/是否有办法避免上传“未发布”模块?是否有方法将“exlcude目录列表”注入SCM svn提供程序

2/一个更具全球性的问题,所采用的方法是否正确?还是一种反模式用法?在这种情况下,替代方案应该是什么


谢谢。

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

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

  • 核心
  • 每个客户类型一个
  • 根据您的结构,每种类型可能有一个包(zip)
我会按照您创建版本的方式对其进行分组。这可能意味着您在进行更改(例如在Core中)时,必须多次运行发布插件,而不是只运行一次,但这样会更干净

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


如果您有公共配置选项,我建议将它们放在公共
父级
pom中。这不必是您的根(多模块)pom。

您是否尝试使用
-r
参数+您想要发布的所有模块列表来运行maven发布插件

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

请参阅有关此命令行的更多详细信息


我从未尝试将它与maven release插件一起使用,我也不知道它是否有效,尤其是在SCM操作方面。

Hi,建议的设计更简洁,但它会为交付团队带来更多工作。我要说的是,如果可以声明Maven模块而不必承担“模块”应该是根项目目录中的物理目录的义务,那就太好了。我在想,如果有一种smlink插件允许在根项目级别定义“模块”,然后通过发布根项目,它的所有“子模块”也将被发布,并且只有这些子模块将被上传到SCM。你觉得怎么样?
      ModuleB
      ModuleC
      ModuleD
      .......