这是一个有趣的经历,我在过去几周构建我的maven多模块项目.
当我决定使用maven进行构建生命周期管理时,我有几个理由想要选择maven.
一个.大多数开发团队都是分开的,这样每个团队都可以在项目中的单独模块上工作,比如Team-A来处理用户管理系统,Team-B来处理授权系统,Team-C来处理文档管理系统......以及等等.每个团队都有java开发人员,测试人员,UI专家等.
因此,maven项目结构应该是每个团队可以独立地在各自的模块上工作.他们必须能够编写,编译,构建,测试,部署他们的模块,而无需编译,测试属于其他团队的模块.
因此我得出结论,maven多模块项目的每个开发模块都必须代表一个功能模块

在论坛上进行了一些讨论之后,我发现人们建议我遵循分层方法,子模块必须是层次,如控制器层,服务层,dao层等.我没有注意这个建议,因为这不能解决我的团队目的致力于个人模块.对于大型项目,这种方式在开发期间每个团队的构建和部署时间增加,这确实影响了项目时间线.有时,如果项目中有10到11个模块,则构建和部署时间最多为30分钟.
但我确实注意到为每个模块保持DAO层分离的建议并不是一个好主意,因为DAO是高度精细的并且被其他模块重用.因此,一个模块对其他模块的依赖性将会变得更大.
我通过创建一个公共模块并将DAO和DOMAIN移动到公共模块找到了解决这个问题的方法,公共模块将作为每个模块的依赖继承.这似乎是一个更可行的选择.现在项目结构看起来像这样.

现在,当我构建项目并在服务器上运行webapp时,它会抱怨404,资源未找到.我发现这是因为缺少WEB-INF/classes文件夹,web-app模块中缺少src/main/java.我搜索并发现了一些链接,表明它是Eclipse中的部署程序集问题.所以我需要手动创建这些文件夹并添加部署程序集,因为maven没有这样做.
但更大的问题是
我不想这样做,即将java文件放在web-app中.我希望所有控制器都可以作为依赖项用于web-app,例如WEB-INF/lib/usermgmtsystem.jar.但那么Tomcat不会在类文件夹中寻找控制器.
我不知道该怎么办?任何建议,将不胜感激.
我有一个场景,其中 jsp 表单中的输入字段列表将映射到支持对象解析中的 HashMap 字段。
@Controller
@RequestMapping("/rms")
class ResolutionManagementController{
private static final String ISSUE_FORM_PATH="/view/resolutionForm";
private static final String SHOW_RESOLUTION_PATH="/view/showResolution";
@Autowired
IIssueManagementService issueService;
@Autowired
ResolutionManagementService resolutionService;
@RequestMapping(value="/resolution/form",method=RequestMethod.GET)
String resolutionForm(Model model){
List<Issue> issues = issueService.listIssue();
model.addAttribute("issues",issues);
model.addAttribute("resolution", new Resolution());
return ISSUE_FORM_PATH;
}
@RequestMapping(value="/resolution",method=RequestMethod.POST)
String resolve(Resolution resolution,Model model){
List<SupportExecutive> executives = resolutionService.addResolution(resolution);
model.addAttribute("executives",executives);
return SHOW_RESOLUTION_PATH;
}
}
Run Code Online (Sandbox Code Playgroud)
支持表单对象
class Resolution{
private String resolutionId;
private String categoryId;
private Map<Issue,SupportExecutive> allotments;
//getters and setters
}
Run Code Online (Sandbox Code Playgroud)
解决表单.jsp
<form:form action="/rms/resolution" commandName="resolution">
<c:forEach var="issue" items="${issues}">
<tr>
<td>
${issue.issueTitle} …Run Code Online (Sandbox Code Playgroud) 我正在创建一个测试应用程序,以在传递给控制器之前实现从 JSON 字符串到员工对象的转换。
以下是执行的关键步骤
Employee.java
package com.bluebench.training.domain;
import org.springframework.stereotype.Component;
@Component("employee")
public class Employee {
private PersonalDetail personal;
private EducationDetail education;
private WorkExperienceDetail experience;
// Getters and Setters
}
Run Code Online (Sandbox Code Playgroud)
other domain objects are also defined
EmployeeManagementController.java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.bluebench.training.domain.Employee;
@Controller
public class …Run Code Online (Sandbox Code Playgroud)