在小型应用程序中使用Maven Multimodule有什么好处吗?

我们正在使用不同的架构层构建一个小型应用程序,例如域,接口,基础架构和应用程序。 这遵循洋葱DDD模型。 现在我想知道将应用程序拆分为多模块maven项目是否有任何好处。 据我所知,现在似乎使事情变得比需要的更困难。 整个应用程序将作为单个WAR文件部署到Tomcat容器中。

拆分您的应用程序对以下内容有意义:

  • 当项目的某个部分需要具有新function或错误修复时,您可以只关注该模块并仅运行测试。 编译所有代码的一小部分并运行相关测试可加快您的工作。

  • 您可以在不同项目中重用模块中的代码。 假设您的项目包含一些编写良好的通用足够的邮件发送代码。 如果您以后有另一个需要邮件发送function的项目,您可以简单地重用现有模块或在其上构建(在另一个模块中将其添加为依赖项)。

  • 从长远来看,易于维护。 也许现在它似乎是一个小项目。 在几个月内,事情可能看起来不同,然后你需要做更多的重构,将事物分成逻辑单元(模块)。

  • 概念清晰度(由Adriaan Koster添加)。

关于WAR:您可以拥有一个汇编模块,将所有相关模块放在一起并生成最终的WAR文件。

最初,这可能看起来更多,但从长远来看,模块化项目更容易使用和维护。 大多数理智的开发人员更喜欢这种方法。

使用多个模块会强制您拥有依赖关系层次结构。 您有一个独立的模块,不依赖于任何其他模块。 你有另一个只依赖于那个。 它可能看起来比允许任何东西依赖于任何其他东西更难,但这种方法会导致一堆混乱的依赖关系,以后很难修复。

如果您尝试遵循分层模型,我建议您将每个图层放在不同的模块中。 这样可以确保您不会破坏模型。

简短的回答:今天它很小,明天它将更大,更复杂,维护,重用,扩展,与其他系统集成等

如果要在另一个项目中重用类或者您的项目部署在不同的配置中,则将项目拆分为多个maven项目非常有用。

也许想到一个Web服务 – 如果您正在托管服务器,您可以为您的域类(模型)和可以由服务器和客户端使用的端点接口构建项目。 服务器将是另一个构建到WAR的项目。

为了开发更多客户,也可以使用第一个项目。

使用父项目对常见项目(如日志记录)以及不同的配置文件和构建配置进行依赖关系管理。

据我所知,Maven对WAR依赖关系没什么帮助。 当你在谈论单一WAR时,这绝不是一个问题。

您可以将java类分成几个“jar”子模块,但如果将WAR项目拆分为几个较小的WAR,则使用某种“重叠”包装会使事情变得复杂。

只是信息,我们的一个项目,它包含太多的网页,所以我们决定将它分成几个WAR子模块,但是,部署的不同WAR之间不会共享会话,我们不会使用Kerberos的东西。 最后,我们修改了很多Glassfish,Jetty,MyFaces等来源。让它们解决JAR中的web.xml问题。 并将整个项目转换为Facelets 2.0(以避免JDK tools.jar和自定义资源处理程序的依赖),唯一的原因是将WAR子模块更改为JAR子模块,并将所有webapp /页面移动到类资源中。 所以结论是,Maven对JAR依赖关系做得很好,但没有WAR或单个WAR。

编辑您可以将applicationContext.xml放在其中一个基本子模块中,并通过classpath:com/example/applicationContext.xml导入它classpath:com/example/applicationContext.xml 。 Spring 3.0也有注释支持,你可以让spring自动扫描它们而不是在xml中声明它们。