一、POM文件
1.1 pom文件中的repositories节点的作用
repositories节点是配置maven下载jar的中央仓库
maven的.m2/setting.xml里面也可以设置,不过是全局的
pom.xml中的配置只对当前Maven项目有效,在实际引用中,我们想通过一次配置就能让本机所有的Maven项目都能使用自定义的Maven私服。这个时候就要用settings.xml 文件。该文件对本机所有的Maven项目有效
1.2 pom文件中的<scope></scope>标签的作用
作用域为<scope>test</scope>,它的作用是,只能在test目录(通过右键->Make Directory as->Test Sources Root来标记)下的类中导入(即import xxx)依赖中的内容;否则在main->java目录(Sources Root标记的)下就无法导入
Maven之scope详解 以及test测试
Maven之scope详解 以及test测试
1.3 pom文件中的parent标签
1.4 <dependencyManagement>标签的使用
Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式。在dependencyManagement元素中声明所依赖的jar包的版本号等信息,那么所有子项目再次引入此依赖jar包时则无需显式的列出版本号。Maven会沿着父子层级向上寻找拥有dependencyManagement 元素的项目,然后使用它指定的版本号。
dependencyManagement使用简介
SpringBoot官方文档
1.5 Maven使用之packaging标签
项目的打包类型:pom、jar、war
packing默认是jar类型,
<packaging>pom</packaging> ---------> 父类型都为pom类型
<packaging>jar</packaging> ---------> 内部调用或者是作服务使用
<packaging>war</packaging> ---------> 需要部署的项目
二、Maven的依赖冲突
和依赖的引入顺序有关系
加载到第一个库后,会忽略接下来的版本库
查看maven的依赖树,排查依赖冲突(不是要求一个灰色的依赖都不存在,而是需要排查哪些应该加载的依赖被替换掉了)
- 排查依赖的语法
<exclusions>
<exclusion>
<groupId><groupId>
<artifactId><artifactId>
<exclusion>
<exclusions>
eg: spring-boot-starter-web中排除日志包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
三、一些总结
3.1 Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
- 添加这个依赖无用
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-autoconfigure -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
- 都说是因为mybatis版本太高,降到1.1.1以下可以
3.2 maven依赖冲突检查工具
IDEA的插件Maven Helper
Maven Helper的用法
选择pom.xml 切换下方Text到Dependency Analyzer
在IDEA中解决jar包冲突的神操作-必看,秒杀市面方法 (非常详细)
maven依赖冲突检查工具
maven 依赖jar包时版本冲突的解决:mvn dependency:tree -Dverbose
【特别注意】在解决冲突时,不能爆红的就排除,要根据报错信息进行排除,如果之前启动没有报错,而在引入了某个包后启动报错了,那么优先根据错误信息排除新加入依赖的包,我自己在排查依赖的过程中,报错了很多地方,最后只排除了“org.slf4j-log4j12”
mvn命令
mvn官网
mvn clean 与 mvn clean package的区别
3.3 实践心得
- [重要]Maven的POM文件parent节点不可以使用properties里面的变量
- dependencyManagement节点中的version不会继承parent节点中的version
- parent的子pom必须继承,dependencyManagement中的可以按需导入;
1)如果不写dependencyManagement,子pom会集成parent中的version;
2)如果即写了dependencyManagement又写了parent,那么按照dependencyManagement中的version。