我有一个关于Maven的多模块项目的一般性问题。何时以及为何要这样做?为什么以及何时创建一个多模块Maven项目?
回答
@Esko Luontola
分裂的答案,如果 模块需要单独部署,该项目分成多个模块是有用的,例如..
可能被误解。如果你有单独部署的模块,则完全相反。在这种情况下,你不应该创建一个多模块版本。这应该通过简单的单独的maven项目来完成。
多模块构建的想法是,如果你有像耳朵项目一样属于一个模块,通常包括其他几个如客户端,服务器,ejb,战争等。这通常是通过一个多模块这意味着所有模块具有相同的版本号,但可以分别访问和使用。
将项目拆分为多个模块非常有用,例如,如果模块需要单独部署,或者在库的情况下,某些项目的消费者只需要一部分类,或者库的开发人员想要明确区分什么是公共API和什么是私有实现。对于大型项目,它可能会使代码更容易保持顺序,即使代码在技术上可能都在同一模块中。
有一些更多的用例中,我会建议使用多模块Maven项目:
你的模块共享相同的依赖关系,在这种情况下,你会指定主POM所有的依赖,以及所有的模块都可以享受它。 (不需要为每个模块指定相同的依赖关系。)
如果您需要在多个项目上一起执行操作。我用我的所有项目创建了一个包,并将它发送给客户,所以我使用主要的pom构建它们,并使用其他maven插件将它们打包为zip文件。
看来这个问题更多的是关于一般软件。 Maven只是这样做的一种方式。
我会qoute从"Continuous Delivery", by Jez Humble
什么是组件的几行?这是一个软件中可怕的超载术语, ,所以我们会尽量让它尽可能清楚我们的意思。 当我们谈论组件时,我们的意思是一个合理的大规模代码 结构在一个应用程序中,有一个定义良好的API,可能会被替换为另一个实现 。 A 基于组件的软件系统的特征在于,将代码块分成离散片段,其通过与其他组件定义明确且有限的交互来提供行为。基于组件的系统的对立面是单体系统,没有明确的边界或负责不同任务的元素之间的关注分离。单片系统通常具有较差的封装,并且在逻辑上独立的结构之间的紧密耦合打破了德米特定律。
...
采用基于组件的设计通常被描述为鼓励 重用和良好结构特性如松散耦合。这是 是真实的,但它也有另一个重要的好处:它是 大型开发团队合作的最有效方法之一。
...
许多项目都是罚款单版本控制库和 简单的部署管道。然而,许多项目已经演变为一个难以维系的代码沼泽,因为没有人做出决定以便创建离散组件,因为这样做很便宜。在 点哪些小项目变成大项目是流畅的,并会潜入你的 。
...
最后,值得注意的Conway的法律,其中规定 “的组织,其设计系统。 。 。被限制为产生 设计,这些设计是这些组织的通信结构的副本。“4因此,例如,开发人员通过电子邮件进行通信的开放源代码项目往往是非常模块化的,只有很少的接口。由小型团队开发的产品将倾向于 紧密耦合而不是模块化。小心你如何设置你的开发团队 - 它会影响你的 应用程序的架构。
我发现这个最后的声明是多么清晰准确。 我强烈推荐这本书! :-)
- 1. 错误创建多模块Maven项目
- 2. 用spring创建一个多模块maven项目
- 3. Rails:何时以及为什么要创建一个gem /插件?
- 4. maven m2eclipse多模块项目
- 5. Maven的多模块项目
- 6. 多模块maven项目
- 7. Eclipse Maven多模块项目
- 8. Maven多模块项目导入模块
- 9. 的Maven(多模块项目) - 模块
- 10. 为什么我的多模块Maven项目不能安装某些模块?
- 11. 发布多模块maven项目中只有一个模块
- 12. 如何创建一个菜单项以显示多个模块
- 13. 如何使用多个子模块从maven项目创建单个库jar?
- 14. 什么是SS_X_JSESSIONID以及何时创建?
- 15. 基于多模块项目的maven构建多个rpms
- 16. maven构建和在多模块构建中分派项目有什么区别?
- 17. 为什么要将Maven项目分解为子模块?
- 18. 为什么你细分为内部项目的maven模块?
- 19. 关于创建Maven项目结构的建议 - 多个模块与多个项目?
- 20. 如何从一个多模块Maven项目
- 21. Maven为多模块项目构建(带Flexmojos)抛出错误
- 22. 的Maven 3.0.3原型创作:从多个模块项目
- 23. 什么是更新多模块Maven项目模块版本的最佳stategy
- 24. IntelliJ - 将Java项目/模块转换为Maven项目/模块
- 25. Eclipse的Maven项目错误创建一个新的Maven项目
- 26. maven如何创建项目的独立ui和后端模块
- 27. 如何编译一个多模块maven项目,其中一个模块同时具有clojure和java代码
- 28. 如何将文件从一个模块包含到多模块maven项目中的另一个模块
- 29. 在maven测试版本中为多模块maven项目忽略模块
- 30. 创建一个Maven部署父项目