关于maven的使用

一、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标签

maven项目pom.xml中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使用之packaging标签

二、Maven的依赖冲突

和依赖的引入顺序有关系
加载到第一个库后,会忽略接下来的版本库
查看maven的依赖树,排查依赖冲突(不是要求一个灰色的依赖都不存在,而是需要排查哪些应该加载的依赖被替换掉了)

  1. 排查依赖的语法
<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>

Maven 篇:正确对待依赖冲突

三、一些总结

3.1 Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

  1. 添加这个依赖无用
<!-- 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>
  1. 都说是因为mybatis版本太高,降到1.1.1以下可以

3.2 maven依赖冲突检查工具

IDEA的插件Maven Helper


image.png

Maven Helper的用法
选择pom.xml 切换下方Text到Dependency Analyzer

image.png

在IDEA中解决jar包冲突的神操作-必看,秒杀市面方法 (非常详细)

maven依赖冲突检查工具
maven 依赖jar包时版本冲突的解决:mvn dependency:tree -Dverbose
【特别注意】在解决冲突时,不能爆红的就排除,要根据报错信息进行排除,如果之前启动没有报错,而在引入了某个包后启动报错了,那么优先根据错误信息排除新加入依赖的包,我自己在排查依赖的过程中,报错了很多地方,最后只排除了“org.slf4j-log4j12”
mvn命令
mvn官网
mvn clean 与 mvn clean package的区别

3.3 实践心得

  1. [重要]Maven的POM文件parent节点不可以使用properties里面的变量
  2. dependencyManagement节点中的version不会继承parent节点中的version
  3. parent的子pom必须继承,dependencyManagement中的可以按需导入;
    1)如果不写dependencyManagement,子pom会集成parent中的version;
    2)如果即写了dependencyManagement又写了parent,那么按照dependencyManagement中的version。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.构建出包 mvn clean package 2.引用仓库配置 a.本地配置查找仓库 在settings.xm...
    刘明_d589阅读 1,787评论 0 1
  • Maven的基本了解 什么是Maven? Maven就是Apache下的一个开源项目。它是用纯java开发的。是一...
    Bcome阅读 7,995评论 0 7
  • Maven编译代码的相关命令 第一、main目录下的主代码编写完毕后,使用Maven进行编译,在项目根目录下运行命...
    加油小杜阅读 5,096评论 0 2
  • 简介 什么是 pom? POM 是 Project Object Model 的缩写,即项目对象模型。 pom.x...
    4ea0af17fd67阅读 3,342评论 0 1
  • 收到外出的友人发来的所见图。内心喜悦。聊几句后互道晚安,觉得安定温暖。 想起一直思考的问题,最幸运不过是,能有人一...
    章媜阅读 1,111评论 0 0