我们正在构建一个使用不同架构层的小型应用程序,例如域,接口,基础架构和应用程序。这遵循洋葱DDD模型。现在我想知道将应用程序拆分为多模块maven项目是否有任何好处。据我所知,现在似乎使事情变得比需要的更困难。整个应用程序将作为单个WAR文件部署到Tomcat容器中。
答案 0 :(得分:9)
拆分您的应用程序对以下内容有意义:
当项目的某个部分需要具有新功能或错误修复时,您可以只关注该模块并仅运行测试。编译所有代码的一小部分并仅运行相关测试可以加快您的工作。
您可以在不同项目中重复使用模块中的代码。我们假设您的项目包含一些编写良好的通用足够的邮件发送代码。如果您以后有另一个需要邮件发送功能的项目,您只需重新使用现有模块或在其上构建(在另一个模块中将其添加为依赖项)。
从长远来看,易于维护。也许现在它似乎是一个小项目。在几个月内,事情可能会有所不同,然后你需要做更多的重构,将事物分成逻辑单元(模块)。
概念清晰度(由Adriaan Koster添加)。
关于WAR:您可以拥有一个汇编模块,将所有相关模块放在一起并生成最终的WAR文件。
最初,这可能看起来更多,但从长远来看,模块化项目更容易使用和维护。大多数理智的开发人员更喜欢这种方法。
答案 1 :(得分:5)
使用多个模块会强制您拥有依赖关系层次结构。您有一个独立的模块,不依赖于任何其他模块。你有另一个只依赖于那个。它可能看起来比允许任何东西依赖其他任何东西更难,但这种方法会导致一堆混乱的依赖,以后很难修复。
如果您尝试按照分层模型进行操作,我建议您将每个图层放在不同的模块中。这样可以确保您不会破坏模型。
答案 2 :(得分:0)
如果您希望在另一个项目中重用您的类,或者您的项目部署在不同的配置中,则将项目拆分为多个maven项目非常有用。
也许想到一个Web服务 - 如果您正在托管服务器,您可以为您的域类(模型)和可以由服务器和客户端使用的端点接口构建项目。服务器将是另一个构建到WAR的项目。
为了开发更多客户,也可以使用第一个项目。
使用父项目对常见项目(如日志记录)以及不同的配置文件和构建配置进行依赖关系管理。
答案 3 :(得分:0)
据我所知,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 / pages移动到类资源中。因此得出结论,Maven对JAR依赖关系做得很好,但没有WAR或单个WAR。
编辑您可以将applicationContext.xml
放入其中一个基本子模块中,然后按classpath:com/example/applicationContext.xml
导入。 Spring 3.0也有注释支持,你可以让spring自动扫描它们,而不是在xml中声明它们。