Maven多模块优于简单依赖

Maven多模块优于简单依赖,maven,dependency-management,maven-module,Maven,Dependency Management,Maven Module,我有多年的maven项目经验,即使是多模块项目(这让我讨厌maven的多模块功能(因此免责声明现在已经完成)),即使我真的喜欢maven,也有一些问题我无法得到明确的答案: 多模块maven项目的典型用例是什么?与简单依赖项和父pom相比,这种结构的附加值是什么? 我见过很多多模块项目的配置,但所有这些都可以通过创建一个简单的依赖关系库结构来明确解决,依赖关系库作为可交付物过着自己的生活(即使有一个父pom,作为一个单独的可交付物:分解依赖关系和配置)我还没有发现任何用例可以清楚地看到多模块结构

我有多年的maven项目经验,即使是多模块项目(这让我讨厌maven的多模块功能(因此免责声明现在已经完成)),即使我真的喜欢maven,也有一些问题我无法得到明确的答案:

多模块maven项目的典型用例是什么?与简单依赖项和父pom相比,这种结构的附加值是什么?

我见过很多多模块项目的配置,但所有这些都可以通过创建一个简单的依赖关系库结构来明确解决,依赖关系库作为可交付物过着自己的生活(即使有一个父pom,作为一个单独的可交付物:分解依赖关系和配置)我还没有发现任何用例可以清楚地看到多模块结构的附加值


我总是发现这种结构带来了过度的复杂性,却没有真正的好处:我在哪里遗漏了什么?(说实话,我可以得出一些
ear
可以从这种结构中受益,但除了那个特定的用例之外,还有其他真正的用途和好处吗?

我认为您在大多数使用多模块的项目中是正确的,实际上不需要它们

在我工作的地方,我们使用多模块项目(我认为这是有充分理由的)。我们有一些类似于面向服务的体系结构,因此每个应用程序

  • 客户端模块
  • 接口模块(在客户端和实现之间具有共享对象)
  • 实现模块
  • 战争舱
我同意将实现和war模块放在同一个实际模块中是可以的,但是(可以说)这样做的好处是,解决问题的类和应用程序与外部世界的通信方式之间有着非常明确的划分


在以前只涉及一个web应用程序的项目中,我尝试将所有内容都放在同一个模块中,因为考虑到我使用的模块,这使得测试更容易。

多模块的主要好处是

  • 只需一个maven命令即可一次性构建所有模块
  • 最重要的是:maven为您处理构建顺序
  • 配置CI服务器也非常简单:只需一个jenkins作业即可构建所有内容
我已经在一个有大约30个子模块的项目中工作过。有时,您需要在多个模块中更改某些内容,必须运行一个命令并确保所有需要编译的内容都按照正确的顺序编译

编辑

为什么是30个子模块


巨大的框架,包含大量的功能,大量的开发人员,在模块基础上分离功能。这是一个真实的用例,将代码分离到模块中非常有意义。

这是一个真实的用例

我有一个多模块项目(对你来说……我没有看到任何复杂的情况)。最终的结果是一个webapp,但我有不同的api、impl和webapp模块

创建项目12个月后,我发现我必须使用从jar运行的独立流程与AmazonS3集成。我添加了一个依赖于api/impl的新模块,并为新模块中的集成编写了代码。我使用汇编插件(或类似插件)创建了一个可运行的jar,现在我有了一个war,可以在tomcat中部署,还有一个进程可以部署在另一台服务器上。我的S3集成过程中没有web类,我的webapp中也没有Amazon依赖项,但我可以在api和impl中共享所有内容


3个月后,我们决定创建一个REST webapp。我们希望将其作为一个单独的应用程序来实现,而不仅仅是现有webapp中的新URL映射。简单。还有一个模块,另一个webapp是maven构建的结果,没有特别的修补。webapp和rest webapp之间可以轻松共享业务逻辑,我可以根据需要部署它们。

多模块可以帮助您重用代码。 这是你在工作中感受到的最好的好处之一

想象一下,如果您有3个带有安全层的web项目,您必须复制粘贴代码3次,然后尝试将其与每个项目连接起来

但是,如果您在一个项目中创建一个具有特定作业的安全模块,该怎么办呢。 通过将它注入到你的应用程序中,然后启动它,使用起来会很容易


正如@ben75的回答中提到的,one-maven build命令和构建所有使用过的jar的正确顺序。您将不再考虑哪个模块依赖于另一个模块。

我发现maven模块非常有用,原因如下:

  • 架构分层和边界

例如,我制作了一个maven模块
应用程序契约
,其中包含表示层看到的接口。因此,我有UI->Presenter->application contract构建顺序对我来说似乎是一个有效的参数,但您能否描述一下为什么需要30个(!)子模块?我曾经在一个项目中工作过12-15个团队。我们有一个主要项目,大约有30个模块。它允许每个团队拥有各自领域的所有权(2-4个模块),并在团队之间明确划分职责。它并不完美,但也没有50个开发人员一直在同一个包中混日子那么糟糕(我在另一个时候也经历过这种情况)仍然不清楚,为什么每个团队都不使用自己的JAR,然后可以将JAR作为依赖项加入到一个模块项目中?在我看来,这是迄今为止描述的最好的用例,而且您对另一个答案的评论证实了我的想法/感觉:多模块为多包装或大型项目提供了价值。我实际上正在计划使用这个答案来演示在哪些情况下不应该使用多模块。我知道这很旧,但我想知道INCLUT的好处是什么