Maven笔记

Maven

  1. 基础
    1. Maven是一个项目管理工具
    2. Maven仓库
    3. Maven常用命令
    4. Maven三套生命周期
  2. jar包冲突
    1. 产生原因
    2. 两种依赖
    3. 解决方法
    4. 锁定jar包版本

基础

Maven是一个项目管理工具


  1. 依赖管理:Maven工程中使用到的jar包都放置在本地仓库中,项目中使用的是jar包的坐标。
  2. 一件构建:Maven自身集成了tomcat插件,可以对项目进行编译,测试,打包,安装,发布等操作。

Maven仓库


仓库的总类

  1. 本地仓库
  2. 远程仓库(私服)
  3. 中央仓库

仓库的关系

  • 启动Maven工程时,Maven工程会通过pom文件中jar包的坐标去本地仓库找对应jar包。
  • 默认情况下,本地仓库没有jar包,Maven工程会自动去中央仓库中下载jar包到本地仓库以供使用。
  • 公司中,如果本地仓库没有对应jar包,会先从私服下载jar包,如果私服没有jar包,可以从中央仓库下载,也可以从本地上传。

Maven常用命令


  • clean
  • compile
  • test
  • package
  • install
  • deploy

Maven三套生命周期


  1. 清理生命周期
  2. 默认生命周期
  3. 站点生命周期

jar包冲突

产生原因

Maven作为一个强大的项目管理工具,在实现依赖管理功能的时候会将相关的依赖包一同导入

例如手动导入spring-context包时

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.2.RELEASE</version>
</dependency>

同时Maven会自动导入四大核心包以及aop以及日志依赖包

此时再手动导入有传递依赖传递依赖四大核心包或者aop或者日志依赖包的jar包时,就有可能出现jar包冲突的问题

两种依赖

  • 直接依赖:项目中直接导入的jar包,就是该项目的直接依赖包
  • 传递依赖:项目中没有直接导入的jar包,可以用过项目直接依赖jar包传递到项目中去。

解决方法

  1. 第一声明优先原则

    哪个jar包的坐标位置靠上,这个jar包就是先声明的。先声明的jar包坐标下的依赖包,可以优先进入项目中。

  2. 路径近者优先原则

    直接依赖路径比传递依赖路径近,那么最终进入的jar包是路径近的直接依赖包。

  3. 手动直接排除法

    当要排除某个jar包下的依赖包时,在配置exclusions标签的时候,内部可以不写版本号。以为此时依赖包使用的版本和默认和本jar包一样。

    <dependencies>
    	<dependency>
        	<groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.2.4RELEASE</version>
        </dependency>
        <!--使用exclusions标签进行手动排除-->
        <exclusions>
        	<exclusion>
            	<groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
        </exclusions>
    </dependencies>
    

锁定jar包版本

凡是依赖别的项目(A),拿到别的项目的依赖包,都是属于传递依赖。而在开发依赖其他项目(A)的项目(B)的同时,B中如果导入一套相关jar包,则是直接依赖,同时有可能造成jar包版本冲突。为了防止这种情况,项目A可以对所导入的jar包的坐标进行锁定,那么其他依赖A的B中,即便是有同名jar包的直接依赖,也无法覆盖,从而达到保护作用。

posted @ 2020-10-17 20:24  夕風吹雨  阅读(77)  评论(0)    收藏  举报