maven常用命令
clean :清理
compile:编译
test:测试
package:打包
install:安装
maven坐标书写规范
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>
maven依赖范围
maven常用依赖范围有四种:
|----------|-----|-----|-----|------------------------------|
| 依赖范围 | 编译时 | 测试时 | 运行时 | 说明 |
| compile | 有效 | 有效 | 有效 | 默认的依赖范围,适用于项目主代码的依赖 |
| provided | 有效 | 有效 | 无效 | 适用于已由运行环境提供的依赖,例如servlet-api |
| runtime | 无效 | 有效 | 有效 | 适用于只在运行时需要的依赖,例如JDBC驱动 |
| test | 无效 | 有效 | 无效 | 适用于只在测试时需要的依赖,例如JUnit |
-
编译时(compile time): 依赖项在编译代码时需要。这包括了编译项目的源代码,包括其直接依赖项。
-
测试时(test time): 依赖项仅在运行测试代码时需要。这包括了运行测试单元时所需的依赖项。
-
运行时(runtime): 依赖项在项目运行时需要,但在编译时不需要。这主要适用于在运行时动态加载的库。
依赖传递
概念 :假设有三个项目 A、 B、 C ,A依赖于B, B依赖于C ,A其实间接依赖于C 。 举个例子 只导入springMvc这个依赖
可以看到他依赖了spring一系列的依赖,这些依赖也被传递导入到项目中
好处
导入一个依赖,可以传递多个依赖到项目中
坏处
会造成依赖冲突
什么是依赖冲突
我导入了一个aop高版本的 它底下的core是高版本,但是 我webMvc 的core是低版本,与我想要导的包不符这就是依赖冲突
如何解决依赖冲突
1. 第一声明者优先原则:
其实就是按照从上到下的顺序 ,谁在上面,谁的传递依赖就生效
2.依赖调节原则(使用路径近者优先原则):
其实就是传递过来的依赖,不如直接声明的依赖,例如我想要spring-core 4 版本的 ,springmvc是5版本的,springmvc里面有springcore间接依赖传递,而我直接声明spring-core4版本,就会直接使用spring-core4版本
3.排除依赖(exclusions标签)(常用)
可以到加了排除标签后 springmvc里面的springaop消失了
4.版本锁定(使用最多)
第一步版本锁定,但这样并没有把依赖导入到项目中
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>6.0.13</version>
</dependency>
</dependencies>
</dependencyManagement>
第二步 在下面声明依赖的时候不用声明版本
XML
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
</dependencies>