1. 依赖
1.1 依赖管理
通过maven的依赖管理对项目中使用的jar包进行统一管理
<dependency>
<groupId>javax.servlet</groupId>//组织名
<artifactId>javax.servlet-api</artifactId>//项目名
<version>3.1.0</version>//版本
<scope>provided</scope>//作用范围
</dependency>
依赖范围 | 编译时 | 测试时 | 运行时 | 例子 |
---|---|---|---|---|
complie | 有效 | 有效 | 有效 | spring-context |
test | 无效 | 有效 | 无效 | junit |
provided | 有效 | 有效 | 无效 | jsp/servlet |
runtime | 无效 | 有效 | 有效 | |
system | 有效 | 有效 | 无效 |
如果没有指定依赖范围,默认使用complie
1.2 依赖传递
只加载了一个jar包,但是与这个jar有依赖关系的也会加载进行
这就会引发依赖冲突的问题
1.3 依赖冲突
1.4 依赖冲突的三种解决方案
-
第一种
第一声明原则,谁声明在前面就使用谁(如果jar太多,就不方便,不推荐)
路径近者优先原则,谁的路径最短,maven就优先使用谁 -
第二种 : 排除jar(不方便,不推荐)
排除了spring-beans的jar
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.12.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
</dependency>
- 第三种: 锁定版本(推荐)
<!--抽取项目中的共同版本
借助于properties 格式自定义 名称随意
-->
<properties>
<!--指定spring的版本-->
<spring.version>5.2.12.RELEASE</spring.version>
<mybatis.version>3.5.6</mybatis.version>
</properties>
<dependencyManagement><!--版本锁定,没有真正引入jar-->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies><!--真正引入jar-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
</dependencies>
2. maven的聚合工程
<groupId>com.zy</groupId>
<artifactId>day72_SSM_Parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!--把当前的工程设定为父工程-->
<packaging>pom</packaging>
在父工程的pom.xml定义jar的版本,不引入依赖.
- 聚合
在pom.xml的标签modules,表示想把其他模块工程聚合到父工程.本质就是把其他模块工程统一交给自己管理
<modules>
<module>day73_SSM_pojo</module>
</modules>
- 继承
子模块工程继承父模块工程,可以使用父工程的相关配置,比如依赖
<parent>//继承父工程
<groupId>com.zy</groupId>
<artifactId>day72_SSM_Parent</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
按层级大至可以分为4层 : pojo,dao,service,web
dao依赖pojo,service依赖dao,web依赖service,而它们都继承父工程
pojo,dao,service它们是jar工程,web是war工程