共计 1451 个字符,预计需要花费 4 分钟才能阅读完成。
1. 写在前面
- 假设一个 Maven 项目(这里是一个 SSM 整合项目)他的构造布局如下:
话不多说,直接上图: - 这个项目存在父子工程(这里删掉了父工程的 src 文件夹,为了使项目可读性更高)
- 这里的子模块 dao,service,web 分别对象项目的 MVC 架构三层持久层、业务层和视图层,domain 和 utils 分别是实体类和工具包
2. 解决项目模块出现多 root 现象
- 先给出解决方法,后再研究问题原因
我们打开父工程的 pom.xml,在这里添加上父子模块的配置 <modules …
我们在最右侧可以看到该项目的工程结构只有一个 root 工程,其他都为子工程
添加完毕,自动配置,OK,问题解决 - 至于原因,最可能的原因就是创建父工程后,再创建子工程的时候,没有勾选继承父工程的选项,若勾选上,IDEA 这个强大的 IDE 是会自动帮你构建完成的。
3. 解决子模块之间的依赖关系
1)先说一下各模块的打包方式
- 我们接着看父工程的 pom.xml 文件,在他的最前面规定了他的打包方式,注意这里打包方式是 pom 方式,用在父级工程或聚合工程中。用来做 jar 包的版本控制。必须指明这个聚合工程的打包方式为 pom
而其子模块的打包方式是我们最常用的 jar 方式打包
以下四个模块都是采用 jar 方式打包,我们可能注意到这里并没有那个 web 子工程,因为他特殊,并不是使用 jar 来打包的;
jar 包中包含了你写程序的所有服务或者第三方类库,它通常是作为幕后工作者,为视图层用户与之交换数据处理的一个服务者
web 模块是我们要部署到 tomact 上提供给客户端去访问的东东,并没有复杂业务逻辑的处理,一个 war 文件可以看成一个 web 应用程序。与 jar 封装不同的是:它内聚了很多页面,如 html、jsp,Servlet,js,css,icon 图片文件等等,当然还包括组成 web 应用的其他组件,这些文件基本没有复杂业务逻辑的处理,基本上仅仅是用来当做程序的门户负责与使用者交互,仅此而已。
补充一点,pom 方式打包即为 pom 工程,jar 方式打包即为 jar 工程,war 方式打包即为 war 工程,具体为什么这么打包,有什么优点,总体上来说是为了项目的前后端分离和结构清晰。
2)各个子工程之间的依赖导入问题
- 以 web 这个子工程为例,这里因为这个工程当中涉及到了 dao 层和 service 层的操作,所以导入这两个工程的依赖,其他的模块导入方式相同
- 这里要注意的是,在依赖导入之前,首先确定自己的各个模块的打包方式是否正确,怎么打包在上边已经有讲到,具体每个模块导入哪些依赖根据自己的业务逻辑决定
4. 最后讲一个自己遇到的非常无语的问题
在我的 web 模块中,其中的 application.xml,一直有两个错误,就是开启注解扫描,总是在这两个包给我报红,而且自己也已经导入 dao 模块和 service 模块的依赖了,仍然报红;
最后发现,真正原因是我对应的 dao 模块和 service 模块根本就没有对应的 pers.pluto.dao 和 pers.plutoservice.impl 这两个文件夹;
小结
总结原因:自己对父子工程的原理理解并不透彻,现在我个人的理解是:
- 父工程的存在只是单纯的为了让各个子工程之间建立一定的联系,就像他们互相导入依赖之后就可以相互调用;
- 在这里其实是完全拥有所导入依赖的一切,包括文件夹结构,比如 dao 模块中的的 pers.pluto.dao,在 web 项目中使用(开启注解扫描),直接使用其本来的路径就可以,不用管父工程的路径;
- 所以我在这里直接删掉了父工程的 src 文件夹,为了避免误解,让结构更清晰。
正文完