Maven
Maven简介
Maven是什么
- Maven的本质是一个项目管理工具
Maven的作用
项目构建:提供标准的、跨平台的自动化项目构建方式
依赖管理:方便快捷的管理项目以来的资源(jar包),避免资源间 的版本冲突问题
统一开发结构:提供标准的、统一的项目结构

MVC三层架构
bean:存放数据
1、存放来自于数据库的数据。
2、存放来自客户端的数据(表单提交),存数据的中介作用
- dao:data access object:数据访问对象,主要做的事情就是对数据库单表进行增删改操作,查的有可能是多表管理查询
- service: 对应界面上的操作,增删改查,至于这个业务涉及到几个dao,就调用几个dao
servlet:
1、接受用户请求,进行处理(doget/dopost)调用service,得到数据
2、做出响应(HTML):通过PrintWriter out = response.getWriter();通过out输出HTML代码
业务流程:
一个业务都是从后到前,首先第一步:设计数据库
dao ——– service(调用多个dao) ——- servlet(接受用户请求,做出响应)——–HTML(JSP技术)
Maven本地仓库配置
创建本地仓库
安装目录–>conf–>settings.xml文件
文件第53行复制出来修改为本地新建的仓库地址
修改镜像地址
安装目录–>conf–>settings.xml文件
文件第153~158行复制出来修改为:
1 | <mirror> |
Maven项目构建
1 | mvn compile #编译 |
分模块开发与设计
一个项目在开发过程中,为了加快开发进程每个人都会负责其中一个小模块。最终将他们整合在一起构成一个完整的项目
依赖于谁就将那个模块pom.xml的
1
2
3<groupId>org.example</groupId>
<artifactId>Ssm_pojo</artifactId>
<version>1.0-SNAPSHOT</version>将子模块的语句当做jar包进入
子模块进行install才能使用
依赖传递
依赖传递
依赖具有传递性
- 直接依赖:在pom文件中直接写的就是
- 间接依赖:直接依赖中所使用的依赖就是间接依赖
依赖传递冲突的问题
- 路径优先:当依赖中出现相同的资源时,层级越靠后优先级越低,层级越靠前优先级越高
- 声明优先:当资源在相同层级被依赖时,越靠后的优先级越高
- 特殊优先:当同等级配置了不同版本,后配置的优先级最高
可选依赖和排除依赖
可选依赖
1 | <dependenaies> |
排除依赖
1 | <dependency> |
注:在排除依赖时,不区分版本是排除所有的对应依赖
可选依赖和排除依赖的区别:
- 可选依赖:对外隐藏当前所依赖的资源
- 排除依赖:外部资源给了,但是我不要主动将其屏蔽
聚合与继承
聚合
分模块开发时,当一个模块进行维护,其他依赖于这个模块的模块不知道就会产生一系列的错误。以pojo、service、dao为例
service和dao依赖于pojo,当pojo更新时service和dao层不能及时构建就会产生引不到pojo中的对象。
而聚合的作用就是使用一个大的,有且只有一个pom文件的类来管理所有的模块。从而保证所包含的模块进行同步构建
创建聚合工程
在pom文件中
打包方式改为packaging
1
<packaging>pom</packaging>
注意:每个maven工程都有自己对应的打包方式,其中默认是jar,web工程是war
将需要管理的模块放置在modules中
1
2
3
4
5<modules>
<module>../3.15SSM</module>
<module>../Ssm_pojo</module>
<module>../SsmWithWeb</module>
</modules>
继承
对于很多模块的很多重复的包引入看起来相当繁琐,可以通过继承从聚合工程中直接拿取
在父工程的pom文件中配置依赖关系(子工程沿用父工程中的依赖)
1
2
3
4
5
6
7<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
</dependencies>配置子工程中可选的依赖
1
2
3
4
5
6
7
8
9<dependencyManagement>
<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</dependency>
</dependencies>
</dependencyManagement>在子工程中配置当前工程所继承的父工程
1
2
3
4
5
6
7
8<!--定义该工程的父工程-->
<parent>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<!--填写父工程的pom文件地址-->
<relativePath>../maven_01_parent/pom.xml</relativePath>
</parent>使用父工程中可选依赖的坐标(不要写版本号,版本号自动使用父工程版本)
1
2
3
4
5
6<dependencies>
<dependency>
<groupId></groupId>
<artifactId></artifactId>
</dependency>
</dependencies>
属性
当我们想要更换版本时,如果一个一个更改不仅费事还有可能出现漏改的情况。对于这种情况我们可以设置一个类似于变量的东西,把属性值存放起来到时候调用这个“变量”从而达到一劳永逸的效果
- 定义属性
1 | <properties> |
- 使用属性
1 | <dependency> |
配置文件加载属性
所谓给配置文件加载属性就是将pom中设置的属性能灵活的赋给
定义属性
1
2
3
4<properties>
<!--自定义属性值-->
<jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_bd</jdbc.url>
</properties>在配置文件中写
1
jdbc.url=${jdbc.url}
告诉资源文件可以使用加载的属性
1
2
3
4
5
6
7
8
9
10<build>
<resources>
<resource>
<!--允许使用的资源包路径-->
<directory>../maven_02_ssm/src/main/resources</directory>
<!--是否使用-->
<filtering>true</filtering>
</resource>
</resources>
</build>
多环境开发
在将来的开发中,sql数据库地址分为三种,分别是生产环境、开发环境和测试环境每一种环境都是不同的路径
Maven提供了多种环境的设定,帮助开发者使用过程中随意地切换环境
定义属性变成了:
1 | <profiles> |
如果我们不想来回的写默认值,可以这样做:

点击之后运行mvn install -P 属性id名(env_test)
私服(Nexus)
私服与本地仓库连接
创建私服仓库


输入仓库名和地址
在本地maven仓库中配置
配置私服

设置私服仓库地址

上传与下载
在父工程中配置当前工程保存在私服中的具体位置
1 | <distributionManagement> |
发布命令:mvn deploy