多模块项目搭建
最近接触到了多模块项目的搭建,为什么要这么做呢,因为一个大型项目其功能繁多,业务复杂,作为单体工程来看,pom文件会变得非常庞大,也不便于团队分工合作。所以多模块去拆分项目,使得庞大的项目分层清晰,便于团队开发,针对具体模块的控制更为方便。我们可以通过Maven去管理整个项目结构以及依赖,按照三层架构或者业务模块去划分模块,这里我们采用三层架构。
案例:apemall,商城项目
使用工具为:IDEA2019 + Maven
搭建步骤如下:
-
通过Maven创建主项目apemall-master(完全不需要任何maven结构,就是一个空项目,甚至不需要src等目录文件,可以直接删掉,只保留pom.xml)
🥦 这里要留意GroupId、ArtifactId,便于项目管理,GroupId=域名+公司名+项目名,而ArtifactId=该模块的具体名字。
image.png
-
创建module子项目,四个分别为:
apemall-web:一个SpringBoot项目,负责存放控制层的类
apemall-service:普通的maven项目,负责存放业务层的类
apemall-dao:普通的maven项目,负责存放数据访问层的类
apemall-common:普通的maven项目,负责存放通用的类,比如实体类、工具类、配置类
-
配置问题
🍀 首先需要在主项目pom文件中加入子模块,这个过程中除了web模块都可以自动地加到modules节点中,需要注意。
<!-- 加入子项目模块 --> <modules> <module>apemall-web</module> <module>apemall-service</module> <module>apemall-dao</module> <module>apemall-common</module> </modules>
🥝 web层项目默认的继承关系为:即继承自spring-boot
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
也就是说它并没有继承自父项目,自然也就调用不到父项目的一切资源,如要修改,可以将web层该继承节点复制到父项目中,因为父项目默认没有继承;再将web层改为继承父项目即可。
🍄 一个问题:SpringBoot项目中调用不到其他项目的资源,需要注意启动类所在包的位置。因为SpringBoot默认扫描启动类所在包底下的所有资源。可适当调整包名或位置,或者做以下修改:
// 二者都可 @SpringBootApplication(scanBasePackages = "com.apesource.apemall") @ComponentScan(basePackages = "com.apesource.apemall")
🥥 还需注意:小心出现循环依赖,也不要过分松散地配置资源以及pom依赖,导致项目不好管理。
-
打包部署
在启动类所在模块使用maven的package进行打包,将打好的jar包直接拷贝到服务器中,执行命令:
java -jar apemall-master-0.0.1-SNAPSHOT.jar
image.png
顺带一嘴maven的主要命令:
clean:清空target目录
compile:编译
package:打包
install:发布到本地仓库
test:测试