• Maven 基本使用及依赖管理。


    目录

    一、Maven 基本介绍

     1、主要功能

     2、标准化的项目结构

     3、基本介绍

     4、仓库 

    二、Maven 安装配置

    1、下载安装

    2、配置环境变量

    3、Maven 基本使用

    三、IDEA中使用Maven

    1、IDEA中配置Maven

    2、Maven坐标

    3、创建及导入项目

    4、配置 Maven-Helper 插件

     四、依赖管理

    1、依赖配置

    2、使用坐标导包

    3、依赖范围

     五、生命周期

             1、Maven 生命周期

    2、插件


    一、Maven 基本介绍

     1、主要功能

    Maven是专门用于管理和构建Java项目的工具,它的主要功能有:

    • 提供了一套标准化的项目结构
    • 提供了一套标准化的构建流程(编译,测试,打包,发布……)
    • 提供了一套依赖管理机制

    2、标准化的项目结构:

            项目结构我们都知道,每一个开发工具(IDE )都有自己不同的项目结构,它们互相之间不通用。我再 eclipse 中创建的目录,无法在idea 中进行使用,这就造成了很大的不方便,
    Maven 提供了一套标准化的项目结构,所有的 IDE 使用 Maven 构建的项目完全一样,所以 IDE 创建的 Maven 项目可以通用。
    Maven构建的项目结构: 

    标准化构建流程:

            我们开发了一套系统,代码需要进行编译、测试、打包、发布,这些操作如果需要反复进行就显得特别麻烦,而Maven提供了一套简单的命令来完成项目构建。

    依赖管理: 

            依赖管理其实就是管理你项目所依赖的第三方资源(jar包、插件)。如之前我们项目中需要使用JDBC和Druid的话,就需要去网上下载对应的依赖包(当前之前是老师已经下载好提供给大家了),复制到项目中,还要将jar包加入工作环境这一系列的操作。

            而Maven使用标准的 坐标 配置来管理各种依赖,只需要简单的配置就可以完成依赖管理。如下图右边所示就是mysql驱动包的坐标,在项目中只需要写这段配置,其他都不需要我们担心,Maven都帮我们进行操作了。 

     3、基本介绍

    ▶ 简介

            Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。

    ▶ Maven 模型

            紫色框框起来的部分,他就是用来完成 `标准化构建流程` 。如我们需要编译,Maven提供了一个编译插件供我们使用,我们需要打包,Maven就提供了一个打包插件提供我们使用等。 

            紫色框起来的部分,项目对象模型就是将我们自己抽象成一个对象模型,有自己专属的坐标 。

    ▶ Maven项目

            依赖管理模型则是使用坐标来描述当前项目依赖哪儿些第三方jar包,如下图所示:

    4、仓库 

    ▶ 仓库的分类

       用于储存各种资源,包含各种jar包 

        ▷ 本地仓库:自己计算机上的存储资源的一个仓库,连接远程仓库获取资源。

        ▷ 中央仓库:由Maven团队维护的全球唯一的仓库

             ● 地址: https://repo1.maven.org/maven2/

        ▷ 远程仓库(私服):一般由公司团队搭建的私有仓库,从中央仓库获取资源

            ● 私服的作用:

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

    ▶ 配置仓库

     ▷ 本地仓库

      ● maven启动后,默认资源下载到本地仓库,默认位置:

    <localRepository>${user.home}/.m2/repositorylocalRepository>

      ● 自定义位置:

    <localRepository>D:\maven\repositorylocalRepository>

     ▷ 远程仓库

      ● 默认连接远程仓库的位置

    1. <repositories>
    2. <repository>
    3. <id>centralid>
    4. <name>Central Repositoryname>
    5. <url>https://repo.maven.apache.org/maven2url>
    6. <layout>defaultlayout>
    7. <snapshots>
    8. <enabled>falseenabled>
    9. snapshots>
    10. repository>
    11. repositories>

     ▷ 镜像仓库

      ● 配置阿里云镜像仓库

    1. <mirrors>
    2. <mirror>
    3. <id>nexus-aliyunid>
    4. <mirrorOf>centralmirrorOf>
    5. <name>Nexus aliyunname>
    6. <url>http://maven.aliyun.com/nexus/content/groups/publicurl>
    7. mirror>
    8. mirrors>

    ▶ 全局setting 与 用户setting 的区别

     ● 全局setting 定义了当前计算器中Maven 的公共配置

     ● 用户setting 定义了当前用户的配置

    ▶ 访问顺序

      当项目中使用坐标引入对应依赖jar包后,首先会查找本地仓库中是否有对应的jar包:

            * 如果有,则在项目直接引用;

            * 如果没有,则去中央仓库中下载对应的jar包到本地仓库。

      如果还可以搭建远程仓库,将来jar包的查找顺序则变为:

            * 本地仓库 --> 远程仓库--> 中央仓库 


    二、Maven 安装配置

    1、下载安装

            下载压缩包,然后解压 (如:apache-maven-3.6.1.rar) 既安装完成,建议解压缩到没有中文、特殊字符的路径下。

    解压缩后的目录结构如下:

      ▷ bin目录 : 存放的是可执行命令。mvn 命令重点关注。
      ▷ conf目录 :存放Maven的配置文件。`settings.xml` 配置文件后期需要修改。
      ▷ lib目录 :存放Maven依赖的jar包。Maven也是使用java开发的,所以它也依赖其他的jar包。

    2、配置环境变量

    ▷  `此电脑` 右键  -->  属性 -->  `高级系统设置`  -->  `高级`  -->  `环境变量`

    ▷ 在 `Path` 中进行配置:

    ▷ 打开命令提示符进行验证,出现如图所示表示安装成功

    ▷ 配置本地仓库

       修改 conf/settings.xml 中的 为一个指定目录作为本地仓库,用来存储jar包。 

    ▷ 配置阿里云私服

       中央仓库在国外,所以下载jar包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的jar包。修改 conf/settings.xml 中的 标签,为其添加如下子标签:

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

    3、Maven 基本使用

    ▶ 常用命令

    • compile :编译
    • clean:清理
    • test:测试
    • package:打包
    • install:安装

    ▶ 项目结构

      Maven构建的项目,项目结构如下:

     而我们要使用上面命令需要在磁盘上进入到这个项目的 `pom.xml` 目录下,打开命令提示符(按住shift 再点击鼠标右键才能打开下列的命令提示符 Windows PowerShell)

    ▶ compile :编译

      命令行执行 mvn compile 可以看到:

        ▷ 从阿里云下载编译需要的插件的jar包,在本地仓库也能看到下载好的插件
        ▷ 在项目下会生成一个 `target` 目录

      同时在项目下会出现一个 `target` 目录,编译后的字节码文件就放在该目录下:

     

    ▶ clean:清理

      执行 mvn clean 命令可以看到

        ▷ 从阿里云下载清理需要的插件jar包
        ▷ 删除项目下的 `target` 目录

    ▶ test:测试

      mvn test 该命令会执行所有的测试代码。执行上述命令效果如下

    ▶ package:打包

      执行 mvn package 命令可以看到:

        ▷ 从阿里云下载打包需要的插件jar包
        ▷ 在项目的 `terget` 目录下有一个jar包(将当前项目打成的jar包)

    ▶ install:安装

       mvn install 该命令会将当前项目打成jar包,并安装到本地仓库。执行完上述命令后到本地仓库查看结果如下:

    ▶ maven项目 和 web项目 结构区分


    三、IDEA中使用Maven

    1、IDEA中配置Maven

    设置 IDEA 使用本地安装的 Maven,并修改配置文件路径 

     2、Maven坐标

    ▶ 坐标?

            Maven 中的坐标是资源的唯一标识,使用坐标来定义项目或引入项目中需要的依赖

    ▶ Maven 坐标主要组成

      groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:com.itheima)
      artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
      version:定义当前项目版本号

      packaging : 定义该项目的打包方式

    ▶ 注意

       上面所说的资源可以是插件、依赖、当前项目。我们的项目如果被其他的项目依赖时,也是需要坐标来引入的。

    ▶ 插件

     Tomcat7 运行插件

    1. <build>
    2. <plugins>
    3. <plugin>
    4. <groupId>org.apache.tomcat.mavengroupId>
    5. <artifactId>tomcat7-maven-pluginartifactId>
    6. <version>2.1version>
    7. <configuration>
    8. <port>80port>
    9. <path>/path>
    10. configuration>
    11. plugin>
    12. plugins>
    13. build>

    3、创建及导入项目

    ▶ 创建项目

     填写模块名称,坐标信息,点击finish,创建完成

    创建好的项目目录结构如下:

    ▶ 导入项目

    选择右侧Maven面板,点击 + 号

     

    选中对应项目的pom.xml文件,双击即可

    如果没有Maven面板,选择

      View --> Appearance --> Tool Window Bars

    可以通过下图所示进行命令的操作:

      

    4、配置 Maven-Helper 插件

     ▷ 选择 IDEA中 File --> Settings

     ▷ 选择 Plugins

     ▷ 搜索 Maven,选择第一个 Maven Helper,点击Install安装,弹出面板中点击Accept

     ▷ 重启 IDEA

        安装完该插件后可以通过 选中项目右键进行相关命令操作,如下图所示:


    四、依赖管理

    1、依赖配置

    ▶ 依赖配置

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

     ● 格式:

    1. <dependencies>
    2. <dependency>
    3. <groupId>junitgroupId>
    4. <artifactId>junitartifactId>
    5. <version>4.12version>
    6. dependency>
    7. dependencies>

    ▶ 依赖传递

     ● 依赖具有传递性:

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

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

    ▶ 依赖传递冲突

     ● 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高

     ● 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的

     ● 特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配置的

    ▶ 可选依赖

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

    1. <dependency>
    2. <groupId>junitgroupId>
    3. <artifactId>junitartifactId>
    4. <version>4.12version>
    5. <optional>trueoptional>
    6. dependency>

    ▶ 排除依赖

     排除依赖指主动排除依赖资源,被排除 的资源无需指定版本--不需要

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

    2、使用坐标导包

            在项目的 pom.xml 中编写 标签,在 标签中 使用 引入坐标,定义坐标的 groupId,artifactId,version

    点击刷新按钮,使坐标生效

    注意:
      ▷ 具体的坐标我们可以到网站进行搜索:https://mvnrepository.com/

    ▶ 快捷方式导入jar包的坐标

    在 pom.xml 中 按 alt + insert,选择 Dependency

    在弹出的面板中搜索对应坐标,然后双击选中对应坐标,点击刷新按钮,使坐标生效

    ▶ 自动导入设置

     选择 IDEA中 File --> Settings

    在弹出的面板中找到 Build Tools

    选择 Any changes,点击 ok 即可生效

    3、依赖范围

            通过设置坐标的依赖范围(scope),可以设置 对应jar包的作用范围:编译环境、测试环境、运行环境。如下图所示给 `junit` 依赖通过 `scope` 标签指定依赖的作用范围。 那么这个依赖就只能作用在测试环境,其他环境下不能使用。

     那么 `scope` 都可以有哪些取值呢?

     作用范围:

            ● 主程序范围有效 (main 文件夹范围内)

            ● 测试程序范围有效 (test 文件夹范围内)

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

     ▷ compile :作用于编译环境、测试环境、运行环境。
     ▷ test : 作用于测试环境。典型的就是Junit坐标,以后使用Junit时,都会将scope指定为该值。
     ▷ provided :作用于编译环境、测试环境。我们后面会学习 `servlet-api` ,在使用它时,必须将 `scope` 设置为该值,不然运行时就会报错。
     ▷ runtime  : 作用于测试环境、运行环境。jdbc驱动一般将 `scope` 设置为该值,当然不设置也没有任何问题 。

     ▷ 注意:
        如果引入坐标不指定 `scope` 标签时,默认就是 compile  值。以后大部分jar包都是使用默认值。

    ▶ 依赖范围传递性

     带有依赖范围的资源进行传递,作用范围受到影响。

    五、生命周期

     1、Maven 生命周期

    Maven 构建项目生命周期描述的是一次构建过程经历经历了多少个事件。Maven 对项目构建的生命周期划分为3套:

       ▷ clean :清理工作。
       ▷ default :核心工作,例如编译,测试,打包,安装等。
       ▷ site : 产生报告,发布站点等。这套声明周期一般不会使用。

    同一套生命周期内,执行后边的命令,前面的所有命令会自动执行。例如默认(default)生命周期如下:

       当我们执行 `install`(安装)命令时,它会先执行 `compile`命令,再执行 `test ` 命令,再执行 `package` 命令,最后执行 `install` 命令。

       当我们执行 `package` (打包)命令时,它会先执行 `compile` 命令,再执行 `test` 命令,最后执行 `package` 命令。

     默认的生命周期也有对应的很多命令,其他的一般都不会使用,我们只关注常用的:

    ▶ clean 生命周期

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

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

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

    ▶ site 构建生命周期

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

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

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

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

    ▶ default 构建生命周期

    2、插件

    ▶ 插件

      ● 插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能

      ● 默认maven在各个生命周期上绑定有预设的功能

      ● 通过插件可以自定义其他功能

    1. <build>
    2. <plugins>
    3. <plugin>
    4. <groupId>org.apache.maven.pluginsgroupId>
    5. <artifactId>maven-source-pluginartifactId>
    6. <version>2.2.1version>
    7. <executions>
    8. <execution>
    9. <goals>
    10. <goal>jargoal>
    11. goals>
    12. <phase>generate-test-resourcesphase>
    13. execution>
    14. executions>
    15. plugin>
    16. plugins>
    17. build>

  • 相关阅读:
    1.DApp-做一个DApp需要学习什么
    07-架构2023版-centos+docker部署Canal 实现多端数据同步
    neo4j load csv 配置和使用
    Nginx内外网代理配置记录
    论文阅读:BGE M3-Embedding——通过自知识提取实现多语言、多功能、多粒度的文本嵌入
    leetcode 44. 通配符匹配(困难,dp)
    代码随想录算法训练营day34
    “掌握技巧:轻松为视频批量添加文字水印“
    ElasticSearch安装部署,单节点部署,集群部署
    virtualbox安装的linux虚拟机安装并启动Tomcat过程(结合idea操作)记录,并使用宿主机访问页面
  • 原文地址:https://blog.csdn.net/yzh2776680982/article/details/126683127