我正在通过 Maven 构建一个多模块 J2EE Web 应用程序。 Web 业务应用程序包含几个子系统/模块。为了获得高模块化、易于分布式团队开发、易于代码导航、易于部署和升级,我们将Web业务应用系统按功能分离,然后逐层分离。这是 Maven 层次结构:
|--business-sub-system-1
| --domain
| --pom.xml
| --dao
| --pom.xml
| --service
| --pom.xml
| --webapp(presentation)
| --pom.xml
|--pom.xml
|
|--business-sub-system-2
| --domain
| --pom.xml
| --dao
| --pom.xml
| --service
| --pom.xml
| --webapp(presentation)
| --pom.xml
|--pom.xml
|
|--business-sub-system-3
| ...
|--business-sub-system-4
|...
|--business-sub-system-5
|...
|...
|pom.xml
但是我们必须共享 webapp,因为整个项目将被视为一个 web 项目(一个 web.xml)。
我的问题是如何将 webapp 分成不同的模块,但可以作为一个网站运行?
(每个业务子系统都有单独的webapp/html/jsp/js/css,但可以在运行时合并为一个网站)
最佳答案
考虑到这一点,我对您的最佳建议是:单独部署单独团队构建的内容。如果这些子系统真的需要相互独立,并且可以独立发布,那么一次性将它们部署在一起是没有意义的。
如果由于系统要求而无法做到这一点,那么架构方面的最佳解决方案是将前端层组合在一个 WAR 组件中,该组件依赖于不同的业务子系统(域、dao 和服务)。团队需要共享这个组件,但可以将他们的工作分开,例如不同的文件夹或包。
话虽如此,咨询的生活往往不是那么容易,因为这样的逻辑解决方案是可能的。所以这是我更实际的答案:
在主 POM 文件中,使用 assembly-plugin打造所有项目的中转战。为了降低程序集的复杂性,您可以将域、dao 和服务 POM 包含为简单的依赖项。
关于Maven 多模块按功能但共享 webapp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18122749/