Maven多模块项目结构问题

Rag*_*kla 10 java eclipse spring tomcat maven

这是一个有趣的经历,我在过去几周构建我的maven多模块项目.

当我决定使用maven进行构建生命周期管理时,我有几个理由想要选择maven.

一个.大多数开发团队都是分开的,这样每个团队都可以在项目中的单独模块上工作,比如Team-A来处理用户管理系统,Team-B来处理授权系统,Team-C来处理文档管理系统......以及等等.每个团队都有java开发人员,测试人员,UI专家等.

因此,maven项目结构应该是每个团队可以独立地在各自的模块上工作.他们必须能够编写,编译,构建,测试,部署他们的模块,而无需编译,测试属于其他团队的模块.

因此我得出结论,maven多模块项目的每个开发模块都必须代表一个功能模块

项目结构1

在论坛上进行了一些讨论之后,我发现人们建议我遵循分层方法,子模块必须是层次,如控制器层,服务层,dao层等.我没有注意这个建议,因为这不能解决我的团队目的致力于个人模块.对于大型项目,这种方式在开发期间每个团队的构建和部署时间增加,这确实影响了项目时间线.有时,如果项目中有10到11个模块,则构建和部署时间最多为30分钟.

但我确实注意到为每个模块保持DAO层分离的建议并不是一个好主意,因为DAO是高度精细的并且被其他模块重用.因此,一个模块对其他模块的依赖性将会变得更大.

我通过创建一个公共模块并将DAO和DOMAIN移动到公共模块找到了解决这个问题的方法,公共模块将作为每个模块的依赖继承.这似乎是一个更可行的选择.现在项目结构看起来像这样.

项目结构2

现在,当我构建项目并在服务器上运行webapp时,它会抱怨404,资源未找到.我发现这是因为缺少WEB-INF/classes文件夹,web-app模块中缺少src/main/java.我搜索并发现了一些链接,表明它是Eclipse中的部署程序集问题.所以我需要手动创建这些文件夹并添加部署程序集,因为maven没有这样做.

但更大的问题是

  1. 我需要将控制器类(如com.mycompany.usermgmtsys.controller.UserMgmtController等)移动到src/main/java或者maven应该从WEB-INF/lib中作为依赖项包含的模块jar中找到控制器.

我不想这样做,即将java文件放在web-app中.我希望所有控制器都可以作为依赖项用于web-app,例如WEB-INF/lib/usermgmtsystem.jar.但那么Tomcat不会在类文件夹中寻找控制器.

我不知道该怎么办?任何建议,将不胜感激.

Rag*_*kla 0

我想通了这个问题。控制器是表示层组件。调度程序期望在目标的 WEB-INF/classes 文件夹中找到表示层组件,而不是在 lib 中查找它。我不确定这是否仅适用于 Eclipse 中基于 Maven 的结构。最后,这些是我所做的改变

A。在 web-app 中创建了 src/main/java 源文件夹。默认情况下,它不会在 web-app 模块中生成。b. 在 src/main/java 文件夹中添加包和相应的控制器。

所以我的最终结构(我没有粘贴精确的 Eclipse 快照,这是通用视图)

最终结构