自从过去几周构建我的 Maven 多模块项目以来,这是我的一次有趣的经历。
当我决定使用 Maven 进行构建生命周期管理时,我有几个原因希望选择 Maven。
A。大多数开发团队都是分开的,这样每个团队都可以在项目中的单独模块上工作,例如团队 A 负责用户管理系统,团队 B 负责授权系统,团队 C 负责文档管理系统......很快。每个团队都有java开发人员、测试人员、UI专家等。
所以maven项目结构应该是这样的,每个团队都可以独立地工作在各自的模块上。他们必须能够编码、编译、构建、测试、部署他们的模块,而不必编译、测试属于其他团队的模块。
因此我得出结论,maven多模块项目的每个开发模块都必须代表一个功能模块
经过论坛上的一些讨论后,我发现人们建议我遵循分层方法,子模块必须是控制器层、服务层、dao 层等层。我没有注意到这个建议,因为这不能解决我的团队目的在单独的模块上工作。这样,对于大型项目,每个团队在开发过程中的构建和部署时间都会增加,这确实会影响项目时间线。有时,如果项目中有 10 到 11 个模块,则构建和部署时间长达 30 分钟。
但我确实注意到了一个建议,即为每个模块保留 DAO 层并不是一个好主意,因为 DAO 是高度粒度的并且可以被其他模块重用。因此,一个模块对另一个模块的依赖性无论如何都会变得更大。
我找到了解决这个问题的方法,方法是创建一个公共模块并将 DAO 和 DOMAIN 移动到公共模块,该模块将作为每个模块的依赖项继承。这似乎是一个更可行的选择。现在项目结构如下所示。
现在,当我构建项目并在服务器上运行 web 应用程序时,它抱怨 404,找不到资源。我发现这是因为 WEB-INF/classes 文件夹丢失,web-app 模块中缺少 src/main/java 。我搜索并发现了几个链接,表明这是 Eclipse 中的部署程序集问题。所以我需要手动创建这些文件夹并添加到部署程序集中,因为 Maven 不这样做。
但更大的问题是
- 我是否需要将 com.mycompany.usermgmtsys.controller.UserMgmtController 等控制器类移动到 src/main/java 或者 maven 应该从作为依赖项包含在 WEB-INF/lib 中的模块 jar 中找到控制器。
我不想这样做,即将 java 文件放入网络应用程序中。我希望所有控制器都应作为依赖项可供 Web 应用程序使用,例如 WEB-INF/lib/usermgmtsystem.jar。但是 Tomcat 不会在类文件夹中寻找控制器吗?
我不知道我该怎么办?任何建议,将不胜感激。