• 让Maven在你这里得心应手


    Maven

    Maven简介

    1)Maven是什么
    Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。
    Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。
    POM (Project ObjectModel) :项目对象模型。

    2)Maven的作用
    项目构建:提供标准的、跨平台的自动化项目构建方式。
    依赖管理:方便快捷的管理项目依赖的资源(jar包) , 避免资源间的版本冲突问题。不用自己手动去下载jar ,pom文件会自动管理下载好的jar包。
    统一开发结构:提供标准的、统一的项目结构。
    用来解决导入java类依赖的jar,编译java项目主要问题。

    下载与安装

    1)Maven下载
    官网
    Maven – Welcome to Apache Maven
    https://maven.apache.org/

    下载地址

    Maven – Download Apache Maven
    https://maven.apache.org/download.cgi

    Binary(bin)是可执行版本,已经编译好可以直接使用。
    Source (src)是源代码版本,需要自己编译成可执行软件才可使用。

        tar.gz和zip两种压缩格式,其实这两个压缩文件里面包含的内容是同样的,只是压缩格式不同。
        tar.gz格式的文件比zip文件小很多,用于unix操作系统。
        zip格式用于Windows操作系统,但在Windows系统使用WinRar工具一样能够解压缩tar.gz格式 。
    
    • 1
    • 2
    • 3

    2)安装与配置
    下载完成后,选择一个路径进行解压,不建议放在c盘

    去配置环境变量,如下图

    此电脑→属性→高级系统设置→环境变量→系统变量→新建变量→填写好变量名和变量值→去path配置路径

    系统变量:变量名:MAVEN_HOME ,变量值:你解压Maven文件所在的地址
    系统变量:path :%MAVEN_HOME%\bin
    在这里插入图片描述

    3.然后win+R运行cmd,输入mvn -vmvn -version,如图所示则配置成功
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iP4HGIVT-1659838250612)(Maven.assets/image-20220807083432433.png)]

    3)配置本地仓库
    因为如果如果不手动配置一个手动仓库,Maven会自动给你添加到默认地址也就是c盘中的.m2的位置,随着导入的包越来越多,也会占用越来越多内存导致电脑运行速度慢。所以需要自己配置一个本地仓库并且设置以后从中央仓库下载到的包放在自己设置的仓库中。

    1.在maven根目录下创建一个repository文件夹,作为本地仓库。
    在这里插入图片描述

    1. 在你解压安装Maven文件的路径下\conf下找到settings.xml文件

    2. 找到节点localRepository,在注释外添加

    你所新建的仓库地址

         localRepository节点用于配置本地仓库,本地仓库其实起到了一个缓存的作用,它的默认地址是 C:\Users\用户名.m2。
        当我们从maven中获取jar包的时候,maven首先会在本地仓库中查找,如果本地仓库有则返回;如果没有则从远程仓库中获取包,并在本地库中保存。
    
        全局setting与用户setting区别
        ●全局setting定义了该系统中所有用户的配置
        ●用户setting定义了当前用户的配置
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4)配置阿里云的镜像仓库
    因为如果都是从中央仓库中获取的话速度会很慢,因为中央仓库的地址在国外,所以我们需要用到阿里云创建的地址去访问中央仓库 ,这样下载jar包的速度比较快。

    步骤如下:

    在settings.xml配置文件中找到mirrors节点。
    添加如下配置(注意要添加在和两个标签之间)。

      <mirror>
        <id>alimavenid>
        <mirrorOf>centralmirrorOf>
        <name>aliyun mavenname>
        <url>http://maven.aliyun.com/nexus/content/repositories/central/url>
      mirror>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5)配置完成后,预下载。
    运行cmd,输入mvn help:system测试,Maven相关工具自动帮我们到Maven中央仓库下载缺省的或者Maven中央仓库更新的各种配置文件和类库(jar包)到Maven本地仓库中。

    基础概念

    仓库

    在这里插入图片描述

    • 仓库
      • 仓库:用于存储资源,包含各种jar包
      • 仓库分类:
        • 本地仓库:自己电脑.上存储资源的仓库,连接远程仓库获取资源。
        • 远程仓库:非本机电脑上的仓库,为本地仓库提供资源。

    • 私服的作用:
      • 保存具有版权的资源,包含购买或自主研发的jar包。
      • 中央仓库中的jar都是开源的,不能存储具有版权的资源。
      • 定范围内共享资源,仅对内部开放,不对外共享。

    坐标

    ​ 什么是坐标?Maven中的坐标用于描述仓库中资源的位置

    Central Repository: (maven.org)
    https://repo1.maven.org/maven2/

    Maven坐标主要组成

    • groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如: org.mybatis)
    • artifactld:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
    • version:定义当前项目版本号
    • packaging:定义该项目的打包方式

    Maven坐标的作用

    • 使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成

    创建一个Maven项目(使用Idear2022.2)

    1)工程目录结构
    在这里插入图片描述

    2)Maven构建项目命令
    Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔。

    mvn compile  # 编译
    mvn clean	# 清理
    mvn  test	# 测试
    mvn package	# 打包
    mvn intall 安装到本地仓库
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3)在IDEA中配置Maven
    1.找到maven设置
    在这里插入图片描述

    2.设置相关

    在这里插入图片描述

    3.使用骨架创建Maven程序

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4.安装Tmcat7运行插件

     
        <build>
            
            <plugins>
                
                <plugin>
                    
                    <groupId>org.apache.tomcat.mavengroupId>
                    
                    <artifactId>tomcat7-maven-pluginartifactId>
                    
                    <version>2.1version>
                    
                    <configuration>
                        
                        <port>82port>
                        
                        <path>/path>
                    configuration>
                plugin>
            plugins>
        build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    依赖管理

    依赖配置

    ​ 依赖指当前项目运行所需的jar,一个项目可以设置多个依赖。

    ​ 格式如下:

     <dependencies>
            
            <dependency>
                
                <groupId>log4jgroupId>
                
                <artifactId>log4jartifactId>
                
                <version>1.2.12version>
                
                <optional>trueoptional>
            dependency>
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    依赖传递

    ​ 依赖具有传递性

    • 直接依赖:在当前项目中通过依赖配置建立的依赖关系

    • 间接依赖: 被资源的资源如果依赖其他资源,当前项目间接依赖其他资源

    依赖传递冲突问题

    依赖传递冲突问题的优先顺序

    • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越低,优先级越高
    • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
    • 特殊优先:当统计配置了相同资源的不同版本时,后配置的覆盖先配置的

    可选依赖

    ​ 可选依赖指对外隐藏当前所依赖的资源——不透明

    	<dependencies>
            
            <dependency>
                
                <groupId>log4jgroupId>
                
                <artifactId>log4jartifactId>
                
                <version>1.2.12version>
                
                <optional>trueoptional>
            dependency>
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    排除依赖

    ​ ·排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要

    <dependency>
        <groupId>junitgroupId>
        <artifactId>junitartifactId>
        <version>4.12version>
        
        <exclusions>
            <exclusion>
            <groupId>org.hamcrestgroupId>
            <artifactId>hamcrest-coreartifactId>
            exclusion>
        exclusions>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    依赖的范围

    • 依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围

    • 作用范围

      • 主程序范围有效(main文件夹内范围内)
      • 测试程序范围有效(test文件夹范围内)
      • 是否参与打包(package指定范围内)
    scope主代码测试代码打包范例
    compile(默认)YYYlog4j
    testYjunit
    providedYYsevlet-api
    runtimejdbc

    7)依赖范围传递性
    带有依赖范围的资源在进行传递时,作用范围将受到影响

    compiletestprovidedruntime(改行直接依赖)
    compile(该列间接依赖)compiletestprovidedruntime
    test
    provided
    runtimeruntimetestprovidedruntime

    生命周期

    1)项目构建生命周期

    Maven构建生命周期描述的是一次构建过程经历经历了多少个事件

    Maven对项 目构建的生命周期划分为3套

    • clean: 清理工作
    • default:核心工作,例如编译,测试,打包,部署等
    • site: 产生报告,发布站点等

    2) clean生命周期

    • pre-clean 执行一-些需要在clean之前完成的工作

    • clean 移除所有上一次构建生成的文件

    • post-clean 执行一些需要在clean之 后立刻完成的工作

    3)default构建生命周期

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-poCm1n1O-1659838250624)(Maven.assets/image-20220807091557867.png)]

    4)site构建生命周期
    ●pre-site 执行一些需要在生成站点文档之前完成的工作

                ●site                生成项目的站点文档
    
                ●post-site        执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
    
                ●site-deploy    将生成的站点文档部署到特定的服务器上
    
    • 1
    • 2
    • 3
    • 4
    • 5

    插件

    • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
    • 默认maven在各个生命周期上绑定有预设的功能
    • 通过插件可以自定义其他功能
     
        <build>
            
            <plugins>  
                 
                <plugin>
                 
                    <groupId>org.apache.maven.pluginsgroupId>
                
                    <artifactId>maven-source-pluginartifactId>
                  
                    <version>2.2.1version>
                    <executions>
                        <execution>
                            
                            <goals>
                                
                                <goal>jargoal>
                                
                                <goal>test-jargoal>
                            goals>
                            
                            <phase>generate-test-resourcesphase>
                        execution>
                    executions>
                plugin>
            plugins>
        build>
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    Maven

    依赖管理

    依赖配置

        <dependencies>
            <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>4.12version>
            dependency>
            <dependency>
                <artifactId>demo3artifactId>
                <groupId>org.examplegroupId>
                <version>1.0-SNAPSHOTversion>
            dependency>
        dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    依赖传递

    • 直接依赖
      • 直接引用的jar或项目
    • 间接依赖
      • 依赖的jar或项目的依赖

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P6bOaEyv-1659838250625)(Maven.assets/image-20220805091243547.png)]

    依赖传递冲突问题

    • 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越低,优先级越高
    • 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
    • 特殊优先:当统计配置了相同资源的不同版本时,后配置的覆盖先配置的

    ### 可选依赖

    • 可选依赖指对外隐藏所依赖的资源——不透明

      	<dependencies>
              <dependency>
                  <groupId>junitgroupId>
                  <artifactId>junitartifactId>
                  <version>4.13version>
                  <optional>trueoptional>
              dependency>
          dependencies>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      不想让别的项目继承该依赖

      optional属性为true时(默认为false),其他项目引用该项目时,该依赖看不到。

      排除依赖

      <dependency>
                  <artifactId>demo3artifactId>
                  <groupId>org.examplegroupId>
                  <version>1.0-SNAPSHOTversion>
                  <exclusions>
                      <exclusion>
                          <groupId>junitgroupId>
                          <artifactId>junitartifactId>
                      exclusion>
                  exclusions>
              dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11

      排除传递过来不需要的依赖。

      依赖的范围

      • 依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围

      • 作用范围

        • 主程序范围有效(main文件夹内范围内)
        • 测试程序范围有效(test文件夹范围内)
        • 是否参与打包(package指定范围内)

    高级教程持续更新中…

  • 相关阅读:
    Sentinel源码解析-源码环境搭建
    数组(C语言)(详细过程!!!)
    webgl 系列 —— 三角形
    C语音-笔记
    【 OpenGauss源码学习 —— 列存储(update)】
    【动手学深度学习-Pytorch版】门控循环单元GRU
    2023年Android Gradle、Gradle插件以及Kotlin版本升级记录
    机器学习——词向量模型(未开始)
    ID3算法
    docker网络
  • 原文地址:https://blog.csdn.net/weixin_47088026/article/details/126207040