maven是我们一款常用的工具,可以使用maven去maven的中央仓库下载我们需要的依赖,摒弃传统以jar包导入外部代码的方式。
其实,maven除了可以通过pom坐标的方式去引入依赖,我们还可以通过maven聚合工程的方式去实现模块的复用。
一、单体项目
我们传统的项目,一般后端采样MVC的架构,会分层,分为dao层,service成,controller层,文件的目录如下,我们把各个模块分类放在不同的包中。
在一般的单体项目中,这种分类的方式还是很好用的,但是这种方法有一个缺点,在一些微服务项目中,比如电商系统,系统可能有一个前台商城页面,还有一个后台的商家管理系统,这两个系统都涉及对Goods商品类的依赖。你想想,商品前台模块和后台模块是两个系统,但是他们都涉及对商品的操作,于是他们必须在两个系统中同时创建一个Goods商品类和商品类的dao,一旦商品类要发生修改,所有带有商品类的工程也要修改。
二、maven聚合工程是什么
maven为了解决这个问题,使用聚合工程这个概念,就是把多个系统需要依赖的类,不再是把它放在一个包里边,而是将它放在一个maven工程里,maven再把这个模块,部署到maven仓库,之后如果其他模块需要这个类,就只需要导入maven坐标,而不用再新建类了,如果类要发生改变,也只需要改动一次后,重新部署到maven仓库了。
maven聚合项目结构一般如下图所示,每个模块不再是一个包,而是一个个maven工程。
三、maven工程的搭建
1、创建父级工程
maven聚合工程中,每个模块都是一个个的maven工程,他们每个子maven工程,依赖在一个父工程下,所以先创建一个父工程。
项目创建好后,设置打包方式为pom
2、创建子工程common
跟父级工程一样不选择模板,创建mall-common,
创建子模块后,默认的打开方式为jar包,无需显示指定
创建好工程后,查看父级工程pom中是否存在子模块的配置项
3、安装创建common的方法,创建web,mapper,service
4、设置模块之间的相互依赖
现在虽然dao,service,web模块都有了,但是他们并不是在一个工程里边,他们属于不同的maven工程,类和类之间是无法直接相互调用的,我们需要配置模块之间的相互依赖
在mapper中的pom配置加上:
1
2
3
4
5
6
7
8<dependencies> <dependency> <groupId>com.mall</groupId> <artifactId>mall-common</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
在service的pom加上:
1
2
3
4
5
6
7
8<dependencies> <dependency> <groupId>com.mall</groupId> <artifactId>mall-mapper</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
在web层的pom加上:
1
2
3
4
5
6
7
8<dependencies> <dependency> <groupId>com.mall</groupId> <artifactId>mall-service</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
他们的依赖关系链是
这样配置后,父级模块就能调用子级模块和子级的子级中定义的类了。
5springboot的基本配置
项目最终想要启动起来,还是需要配置springboot
【1】在父级pom中添加依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47<!--配置springboot 引入依赖parent,完成之后就是springboot工程了 作用:加载了很多的依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.5.RELEASE</version> <relativePath/> </parent> <!--设置资源属性--> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <!--引入核心依赖--> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <!--排除springboot默认的日志依赖--> <exclusions> <exclusion> <groupId>org.springframeork.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> <!--排除logback日志--> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency> <!--配置spring自带的web板块--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--配置解析xml--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> </dependencies>
【2】application.properties
在web的resources下创建
在application.properties中添加配置端口:
1
2
3
4
5
6
7
8#配置端口号 #配置服务器端口 server.port=8088 server.tomcat.uri-encoding=utf-8 server.max-http-header-size=80KB server.servlet.context-path=/
【3】创建启动项application.java
【4】在web下创建controller测试类
访问接口
四、maven的模块复用
看的这里,maven工程已经搭建完毕了,但现在,对于这个工程而言,模块复用并没有体现出,但如果我们再建一个工程,这个工程和当前工程共用common模块的Goods类,来看看如何复用。
1、先创建Goods类
2、使用install把项目安装到本地仓库
3、在其他maven项目假如common坐标
4、使用Goods
最后
以上就是纯情高跟鞋最近收集整理的关于Maven聚合工程一、单体项目二、maven聚合工程是什么三、maven工程的搭建四、maven的模块复用的全部内容,更多相关Maven聚合工程一、单体项目二、maven聚合工程是什么三、maven工程内容请搜索靠谱客的其他文章。
发表评论 取消回复