• 【Maven】基础快速入门


    1、Maven概述

    1.1、Maven是什么

    1. 在Javaweb开发中,需要使用大量的jar包,我们手动去导入;
    2. 如何能够让一个东西自动帮我导入和配置这个jar包。由此,Maven诞生了!
    • Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)

    • Maven是用Java语言编写的。他管理的东西统统以面向对象的形式进行设计,最终它把一个项目看成一个对象,而这个对象叫做POM(project object model),即项目对象模型

    我们说一个项目就是一个对象,作为对象的行为、对象的属性都有哪些呢?

    Maven说我们需要编写一个pom.xml文件,Maven通过加载这个配置文件就可以知道我们项目的相关信息了!到这里我们知道了Maven离不开一个叫pom.xml的文件。因为这个文件代表就一个项目

    提个问题大家思考,如果我们做8个项目,对应的是1个文件,还是8个文件?肯定是8个!

    那Maven是如何帮我们进行项目资源管理的呢?这就需要用到Maven中的第二个东西:依赖管理。这也是它的第二个核心!

    • 所谓依赖管理就是maven对项目所有依赖资源的一种管理,它和项目之间是一种双向关系,即当我们做项目的时候maven的依赖管理可以帮助你去管理你所需要的其他资源,当其他的项目需要依赖我们项目的时候,maven也会把我们的项目当作一种资源去进行管理,这就是一种双向关系。

    • 那maven的依赖管理它管理的这些资源存在哪儿呢?主要有三个位置:本地仓库,私服,中央仓库

    • 本地仓库顾名思义就是存储在本地的一种资源仓库,如果本地仓库中没有相关资源,可以去私服上获取,私服也是一个资源仓库,只不过不在本地,是一种远程仓库,如果私服上也没有相关资源,可以去中央仓库去获取,中央仓库也是一种远程仓库。

    • Maven除了帮我们管理项目资源之外还能帮助我们对项目进行构建,管理项目的整个生命周期,当然它的这些功能需要使用一些相关的插件来完成,当然整个生命周期过程中插件是需要配合使用的,单独一个无法完成完整的生命周期

    在这里插入图片描述

    1.2、Maven的作用

    Maven的作用我们可以分成三类:

    (1)项目构建:提供标准的,跨平台的自动化构建项目的方式

    (2)依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题

    (3)统一开发结构:提供标准的,统一的项目开发结构,如下图所示:

    在这里插入图片描述

    各目录存放资源类型说明:

    • src/main/java:项目java源码
    • src/main/resources:项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)
    • src/main/webapp:web资源(比如html,css,js等)
    • src/test/java:测试代码
    • src/test/resources:测试相关配置文件
    • src/pom.xml:项目pom文件

    2、下载安装Maven

    2.1、新版下载

    官网:https://maven.apache.org/download.cgi

    在这里插入图片描述

    2.2、旧版下载

    旧版本下载步骤:我们以3.6.1版本为例

    在这里插入图片描述
    点击 archives

    在这里插入图片描述

    2.3、安装

    maven是一个绿色软件,解压即安装,非常容易,

    我们将下载好的apache-maven-3.6.1-bin.zip直接解压到D盘根目录下即可

    解压完成后我们可以查看一下maven自己的一个目录结构如下:

    在这里插入图片描述

    各目录结构说明:

    • bin:可执行程序目录,

    • boot:maven自身的启动加载器

    • conf:maven配置文件的存放目录

    • lib:maven运行所需库的存放目录

    2.4、配置环境变量

    我的电脑-------->属性--------->高级系统设置---------->新建系统变量MAVEN_HOME

    在我们的系统环境变量中

    配置如下配置:

    MAVEN_HOME maven的目录
    在系统的path中配置 %MAVEN_HOME%\bin
    之后在命令行窗口中输入mvn -version
    测试Maven是否安装成功,保证必须配置完毕!

    在这里插入图片描述

    2.5、配置阿里云镜像

    https://developer.aliyun.com/mvn/guide

    在settings.xml里面的mirrors标签里面导入:

    <mirror>
      <id>aliyunmavenid>
      <mirrorOf>*mirrorOf>
      <name>阿里云公共仓库name>
      <url>https://maven.aliyun.com/repository/publicurl>
    mirror>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.6、配置本地仓库

    在Maven -bin 的同级目录下建立一个文件夹 maven-repo

    在这里插入图片描述
    建立一个本地仓库:localRepository

    在settings.xml里面的localRepository下导入

    <localRepository>D:\Develop\apache-maven-3.6.1\maven-repolocalRepository>
    
    • 1

    3、Maven基础概念

    3.1、坐标

    我们说maven的仓库里存储了各种各样的资源(jar包),那这些资源我们如何找到它们呢?我们需要知道它们具体的一个位置才能知道如何找到它们,这个就叫坐标

    坐标: maven中的坐标用于描述仓库中资源的位置

    maven坐标的主要组成如下:

    • groupId:定义当前资源隶属组织名称(通常是域名反写,如:org.mybatis;com.itheima)

    • artifactId:定义当前资源的名称(通常是项目或模块名称,如:crm,sms)

    • version:定义当前资源的版本号

    • packaging:定义资源的打包方式,取值一般有如下三种

      • jar:该资源打成jar包,默认是jar java工程打包为jar
      • war:该资源打成war包 web工程打包为war
      • pom:该资源是一个父资源(表明使用maven分模块管理),打包时只生成一个pom.xml不生成jar或其他包结构
    
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        
        <modelVersion>4.0.0modelVersion>
        
        <packaging>warpackaging>
        
        
        <groupId>com.itheimagroupId>
        
        <artifactId>web01artifactId>
        
        <version>1.0-SNAPSHOTversion>
        
        
        <dependencies>
            
            <dependency>
            dependency>
        dependencies>
    project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    4、Maven依赖管理

    4.1、依赖配置与依赖传递

    依赖是指在当前项目中运行所需的jar,依赖配置的格式如下:

    
    <dependencies>
        
        <dependency>
            
            <groupId>JunitgroupId>
            
            <artifactId>JunitartifactId>
            
            <version>4.12version>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    依赖传递:

    依赖具有传递性,分两种

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

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

    4.1.1、依赖传递冲突

    依赖传递的冲突问题:

    在依赖传递过程中产生了冲突,我们有三种优先法则:

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

    在这里插入图片描述

    以当前项目为根,直接依赖称为1度资源,直接依赖的直接依赖称为2度资源,直接依赖的直接依赖的直接依赖称为3度资源。

    当然依赖冲突在这里我们并不需要记,后面会有如何解决此问题的办法。

    4.1.2、可选依赖optional

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

    加一个 标签

    <dependencies>
        <dependency>
            <groupId>JunitgroupId>
            <artifactId>JunitartifactId>
            <version>4.12version>
            <optional>trueoptional>   
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    4.1.3、排除依赖exclusions

    排除依赖指主动断开依赖的资源,被排除的资源无需指定版本

    <dependencies>
        <dependency>
            <groupId>JunitgroupId>
            <artifactId>JunitartifactId>
            <version>4.12version>
            <exclusions>
                <exclusion>
                    <groupId>log4jgroupId>
                    <artifactId>log4jartifactId>
                exclusion>
        dependency>
    dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    4.2、依赖范围

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

    这里的范围主要是指以下三种范围

    (1)主程序范围有效(src/main目录范围内)

    (2)测试程序范围内有效(src/test目录范围内)

    (3)是否参与打包(package指令范围内)

    此外,scope标签的取值有四种:compile、test、provided、runtime

    在这里插入图片描述

    带有依赖范围的资源进行传递时,作用范围会受到影响(了解)
    在这里插入图片描述

    5、Maven生命周期与插件

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

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

    5.1、clear生命周期

    clean:清理工作

    • pre-clean:执行一些在clean之前的工作

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

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

    5.2、default生命周期

    default:核心工作,例如编译,测试,打包,部署等

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

    对于default生命周期,每个事件在执行之前都会将之前的所有事件依次执行一遍

    5.3、site生命周期

    site:产生报告,发布站点等

    • pre-site:执行一些在生成站点文档之前的工作

    • site:生成项目的站点文档

    • post-site:执行一些在生成站点文档之后完成的工作,为部署做准备

    • site-deploy:将生成的站点文档部署到特定的服务器上

    5.4、插件

    插件:

    • 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件
    • maven默认在各个生命周期上都绑定了预先设定的插件来完成相应功能
    • 插件还可以完成一些自定义功能

    插件的配置方式如下:我们以打包源码为例

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-source-pluginartifactId>
                <version>2.2.1version>
                <executions>
                    <excution>
                        <goals>
                            
                            <goal>jargoal>
                        goals>
                        <phase>generate-test-resourcesphase>
                    excution>
                executions>
            plugin>
        plugins>
    build>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    《C++ Primer Plus》《9、内存模型和名称空间》
    实现前后端分离开发:构建现代化Web应用
    RabbitMQ
    12.Gateway新一代网关
    springboot基于安卓的移动数字图书馆的设计与实现毕业设计源码030911
    Java | abstract关键字【面向对象的第三大特征——多态】
    基于SpringBoot的旅游网站开题报告
    HTML学生中秋节日网页设计模板 DIV布局大学生中秋节网页作业制作 八月十五中秋静态网页成品代码下载 中秋节日网页设计作品
    K8S集群中Pod挂载Storageclass存储卷异常排查思路
    使用MySQL, JSON 这张牌你一定要善用
  • 原文地址:https://blog.csdn.net/qq_42500831/article/details/134407911