Maven 多模块按功能但共享 webapp

标签 maven jakarta-ee architecture pom.xml modularity

我正在通过 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)。

enter image description here

我的问题是如何将 webapp 分成不同的模块,但可以作为一个网站运行?
(每个业务子系统都有单独的webapp/html/jsp/js/css,但可以在运行时合并为一个网站)

最佳答案

考虑到这一点,我对您的最佳建议是:单独部署单独团队构建的内容。如果这些子系统真的需要相互独立,并且可以独立发布,那么一次性将它们部署在一起是没有意义的。

如果由于系统要求而无法做到这一点,那么架构方面的最佳解决方案是将前端层组合在一个 WAR 组件中,该组件依赖于不同的业务子系统(域、dao 和服务)。团队需要共享这个组件,但可以将他们的工作分开,例如不同的文件夹或包。

话虽如此,咨询的生活往往不是那么容易,因为这样的逻辑解决方案是可能的。所以这是我更实际的答案:

在主 POM 文件中,使用 assembly-plugin打造所有项目的中转战。为了降低程序集的复杂性,您可以将域、dao 和服务 POM 包含为简单的依赖项。

关于Maven 多模块按功能但共享 webapp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18122749/

相关文章:

jsp中的Spring MVC模型访问失败

maven - Jenkins 为 Maven 作业执行的默认命令是什么?

mysql - 运行 Spring Boot 后 IntelliJ 中的红色文件夹 :run

java - 格式化 TreeItem 文本颜色?

node.js - 架构:有效地计算和维护类似 Reddit 的网站中用户提交的分数

java - 打开 Whisper Systems Signal Build Maven 构建错误

java - EAR 中有效的项目结构

html - 如何将所需的 HTML 属性正确设置为 TymeLeaf 页面中的输入标记?

java - 启动 map Activity 的正确方法?

node.js - 从不同的微服务收集数据的正确方法是什么?