Maven核心:pom.xml
POM:Project Object Model,项目对象模型。和 POM 类似的是:DOM(Document Object Model),文档对象模型。它们都是模型化思想的具体体现
Maven中的坐标
maven通过 groupId、artifactId与version来确定唯一一个jar包
- groupId:公司或组织的 id
- artifactId:一个项目或者是项目中的一个模块的 id
- Maven 工程的工程名
- version:版本号
- SNAPSHOT 表示快照版本,正在迭代过程中,不稳定的版本,RELEASE 表示正式版本
例如
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<!-- servlet-api.jar包位于: Maven本地仓库根目录\javax\servlet\servlet-api\2.5\servlet-api-2.5.jar -->
<groupId>com.公司名.工程名</groupId>
<artifactId>项目名</artifactId>
<version>1.0</version>
maven仓库地址: https://mvnrepository.com/
Maven 依赖范围
Maven是通过坐标来引入jar包的,再引入时,可以指定这个jar包的作用范围。maven的默认依赖范围是complie。maven
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.20</version>
<scope>compile</scope>
</dependency>
</dependencies>
Maven的依赖范围包括: compile,provide,runtime,test,system,import。
compile:表示编译范围,指A在编译时依赖B,该范围为默认依赖范围。编译范围的依赖会用在编译,测试,运行,由于运行时需要,所以编译范围的依赖会被打包。
provided:provied依赖只有当jdk或者一个容器已提供该依赖之后才使用。provide依赖在编译和测试时需要,在运行时不需要。例如:servlet api被Tomcat容器提供了。
runtime:runtime依赖在运行和测试系统时需要,但在编译时不需要。例如:jdbc的驱动包。由于运行时需要,所以runtime范围的依赖会被打包。
test:test范围依赖在编译和运行时都不需要,只在测试编译和测试运行时需要。例如:Junit。由于运行时不需要,所以test范围依赖不会被打包。
system:system范围依赖与provide类似,但是必须显示的提供一个对于本地系统中jar文件的路径。一般不推荐使用。
import:maven依赖是单继承,import依赖范围是与dependencyManagement元素配合使用,为将目标pom文件中dependencyManagement的配置导入合并到当前pom的dependencyManagement中.
依赖范围 | 编译 | 测试 | 运行时 | 是否会被打入jar包 |
---|---|---|---|---|
compile | √ | √ | √ | √ |
provided | √ | √ | × | × |
runtime | × | √ | √ | √ |
test | × | √ | × | × |
system | √ | √ | × | √ |
import | × | × | × |
可选依赖
可选依赖表示这个依赖不是必须的。通过在中添 加true 表示,默认是不可选的。可选依赖不会被传递。
maven系统变量
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><!--项目构建使用的编码,避免中文乱码-->
<maven.compiler.source>1.8</maven.compiler.source><!--源码编译 jdk 版本-->
<maven.compiler.target>1.8</maven.compiler.target><!--运行代码的 jdk 版本-->
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><!--生成报告的编码-->
</properties>
Maven 依赖优先原则
第一原则:最短路径优先。
一个项目M依赖了两个jar包,其中A-D(1.0) , A-B-D(2.0)。由于D(1.0)路径最短,所以项目使用的是D(1.0)。
第二原则:相同路径下配置在前的优先。
在整个pom.xml中,如果依赖路径长度相同,那么先声明的依赖,就是使用的版本。M项目使用D 1.0版本
第三原则:覆盖优先原则
子pom内声明的优先于父pom中的依赖。