【发布时间】:2012-07-28 16:04:02
【问题描述】:
我有一个关于 Maven 的多模块项目的一般性问题。何时以及为什么要这样做?
【问题讨论】:
标签: maven project-organization multi-module
我有一个关于 Maven 的多模块项目的一般性问题。何时以及为什么要这样做?
【问题讨论】:
标签: maven project-organization multi-module
@Esko Luontola 的回答
将项目拆分为多个模块很有用,例如,如果 模块需要单独部署,..
可能会被误解。如果您有将单独部署的模块,则恰恰相反。在这种情况下,您永远不应该创建多模块构建。这应该通过简单的独立 maven 项目来完成。
多模块构建的想法是,如果您的模块像一个ear 项目一样属于一起,通常由几个其他模块组成,如客户端、服务器、ejb、war 等。这通常通过多模块构建来处理这意味着所有模块都具有相同的版本号,但可以由其他模块单独访问和使用。
【讨论】:
这个问题似乎更多地是关于软件的。 Maven 只是其中一种方式。
我会引用"Continuous Delivery", by Jez Humble的几行代码
什么是组件?这是软件中一个可怕的超载术语, 因此,我们将尽可能清楚地说明我们的意思。 当我们谈论组件时,我们指的是相当大规模的代码 应用程序中的结构,具有良好定义的 API,可以 可能会被换成另一个实现。一种 基于组件的软件系统的特点是 代码库分为离散的部分,通过 与其他组件的定义明确的、有限的交互。这 基于组件的系统的对立面是一个单片系统,没有 清晰的边界或元素之间的关注点分离 负责不同的任务。单片系统通常具有 封装性差,逻辑独立之间的紧密耦合 结构违反了得墨忒耳法则。
...
采用基于组件的设计通常被描述为令人鼓舞 重用和良好的架构属性,例如松散耦合。这 是的,但它还有另一个重要的好处:它是 大型开发团队协作的最有效方式。
...
许多项目都可以使用单个版本控制存储库和 简单的部署管道。然而,许多项目已经演变成 无法维护的代码泥潭,因为没有人决定 在成本低廉的情况下创建离散组件。点在 哪些小项目变成更大的项目是流动的,并且会偷偷摸摸 靠你。
...
最后,值得注意的是康威定律,它指出 “设计系统的组织。 . .被限制生产 设计是这些通信结构的副本 ”4 因此,例如,开源项目 仅通过电子邮件进行交流的开发人员往往非常模块化,几乎没有 接口。由一个小型的、位于同一地点的团队开发的产品将倾向于 紧密耦合而不是模块化。注意你的设置方式 你的开发团队——它会影响你的架构 应用。
我发现这最后的陈述是如此清晰和准确。 我强烈推荐那本书! :-)
【讨论】:
将项目拆分为多个模块很有用,例如,如果模块需要单独部署,或者在库的情况下,项目的某些使用者只需要类的子集,或者库的开发人员想要制作明确区分什么是公共 API 和什么是私有实现。对于大型项目,它可能会使代码更容易保持有序,即使从技术上讲,代码可能都在同一个模块中。
【讨论】:
还有一些我会推荐使用多模块maven项目的用例:
您的模块共享相同的依赖项,在这种情况下,您将在主 pom 中指定所有依赖项,并且所有模块都可以享受它。 (无需为每个模块指定相同的依赖关系。)
如果您需要同时对多个项目执行操作。 (我个人使用它),我从我的所有项目中创建一个包,并将其发送给客户,因此我使用主 pom 构建它们,并使用其他 maven 插件将它们打包为 zip 文件。
【讨论】: