学习视频

www.atguigu.com

目前的技术在开发中存在的问题

  1. 一个项目就是一个工程
    如果项目非常庞大,就不适合继续使用package来划分模块。最好是每一个模块对应一 个工程,利于分工协作。
    借助于Maven就可以将一个项目拆分成多个工程。
  2. 项目中需要的jar包必须手动"复制”、"粘贴” 到WEB一INF/ib目录 下
    带来的问题是:同样的jar包文件重复出现在不同的项目工程中,一方 面浪费存储空间,外也让工程比较臃肿。
    借助Maven ,可以将jar包仅仅保存在“仓库”中,有需要使用的工程”引用”这个文件接口,不需要真的把jar包复制过来。
  3. jar包需要别人替我们准备好,或到官网下载
    不同技术的官网提供jar包下载的形式是五花八门的。
    有些技术的官网就是通过Maven或SVN等专门】的工具来提供下载的。
    如果是以不规范的方式下载的jar包,那么其中的内容很可能也是不规范的。
    借助于Maven可以以一种规范的方式下载jar包。因为所有知名框架或第三方工具的jar包以及按照统一的规范存放在了Maven的中央仓库中。以规范的方式下载的jar包,内容也是可靠的。
    Tips:”统一的规范” 不仅是对IT开发领域非常重要,对于整个人类社会都是非常重要的。
  4. 一个jar包依赖的其他jar包需要自己手动加入到项目中
    FileUpload组件一 +IO组件。 commons一fileupload一1.3.jar依赖于commons一io一2.0.1.jar。
    如果所有jar包之间的依赖关系都需要程序员自己非常清楚的了解,那么就会极大的增加学习成本。
    Maven会自动将被依赖的jar包导入进来。

Maven 是什么

  1. Maven是一款服务 于Java平台的自动化构建工具。Make一 +Ant一→Maven一→Gradle
    妹文、文

  2. 构建

    1. 概念:以"Java源文件”、”框架配置文件”、 "JSP” 、"HTML” 、”图片” 等资源为“原材料”, 去"生产”一个可以运行的项目的过程。;编译
      ■部署
      ■搭建

    2. 编译: Java源文件【Userjava】一→编译一→Class字节码文件【User.class】一 +交给JVM去执行

    3. 部署:一个BS项目最终运行的并不是动态Web工程本身,而是这个动态Web工程"编译的结果”
      生的鸡一处理一→熟的鸡
      动态Web工程一→编译、部署一→编译结果

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gZC3el1K-1590504002622)(自动化构建工具:Maven.assets/image-20200526203644062.png)]

      开发过程中,所有的路径或配置文件中配置的类路径等都是以编译结果的目录结构为标准。

    4. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-whxO473i-1590504002623)(自动化构建工具:Maven.assets/image-20200526203822823.png)]

  3. 构建过程中的各个环节
    【1】清理:将以前编译得到的旧的class字节码文件删除,为下一次编译做准备
    【2】编译:将Java源程序编程成class字节码文件
    【3】测试:自动测试,自动调用junit程序
    【4】报告:测试程序执行的结果
    【5】打包:动态Web_ I程打war包, Java工程打jar包
    【6】安装: Maven特定的概念一将打包得到的文件复制到 “仓库”中的指定位置
    【7】部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行

  4. 自动化构建

安装Maven 核心程序

解压到你想安装的目录即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A2ubUmuR-1590504002624)(自动化构建工具:Maven.assets/image-20200526204100798.png)]

配置环境变量(方便我们日常使用)

  • 注意:maven是java编写的所以需要先配置好JAVA_HOME

  • windows配置方式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kQfnHtn7-1590504002626)(自动化构建工具:Maven.assets/image-20200526204143072.png)]

  • Linux 配置方式(mac 为例)

    $ vim /etc/profile # 添加下面的内容到文件中# 添加maven的配置(下面的路径是你maven的安装目录)export M2_HOME=/opt/module/maven-3.6.3export MAVEN_HOME=/opt/module/maven-3.6.3 # 这个可以不写,没啥意义export PATH=$MAVEN_HOME/bin:$M2_HOME/bin:$PATH# 重新加载配置文件
    $ source /etc/profile
    

修改maven 的settings.xml

  • 配置了国内镜像和默认使用jdk8编译
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><!-- 设置里maven仓库的地址 -->
<localRepository>/opt/module/maven-3.6.3/maven_repository</localRepository><pluginGroups></pluginGroups><proxies></proxies><servers></servers><mirrors><mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/repositories/central/</url></mirror><mirror><id>repo1</id><mirrorOf>central</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://repo1.maven.org/maven2/</url></mirror><mirror><id>repo2</id><mirrorOf>central</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://repo2.maven.org/maven2/</url></mirror></mirrors><profiles>
<!-- 这版本的maven 识别不到1.8 版本的jdk。所以会出现设置了没效果 --><profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile></profiles></settings>

Maven 核心概念

  1. 约定的目录结构
  2. POM
  3. 坐标
  4. 依赖
  5. 仓库
  6. 生命周期/插件/目标
  7. 继承
  8. 聚合

Maven 目录结构

  1. 创建约定的目录结构
    【1】根目录:工程名
    【2】src目录:源码.
    【3】pom.xml文件: MavenI程的核心配置文件
    【4】main目录:存放主程序
    【5】test目录:存放测试程序;
    【6】java目录:存放Java源文件
    【7】resources目录:存放框架或其他工具的配置文件

  2. 为什么要遵守约定的目录结构呢?

    • Maven要负责我们这个项目的自动化构建,以编译为例, Maven要想自动进行编译,那么它必须知道Java源文件保存在哪里。

    • 如果我们自己自定义的东西想要让框架或工具知道,有两种办法

      • 以配置的方式明确告诉框架

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-liaIXQ5C-1590504002627)(自动化构建工具:Maven.assets/image-20200526205334667.png)]

      • 遵守框架内部已经存在的约定

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uZwSxpQG-1590504002627)(自动化构建工具:Maven.assets/image-20200526205348357.png)]

      • 约定 > 配置 > 编码

  3. maven 的 java 的目录结构

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7xxopKIJ-1590504002628)(自动化构建工具:Maven.assets/image-20200526205511499.png)]

  4. maven 的 web 项目的目录结构

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iYNnYMyL-1590504002629)(自动化构建工具:Maven.assets/image-20200526205725303.png)]

Maven 常用命令

  1. 注意:执行与构建过程相关的Maven命令,必须进入pom.xml所在的目录。与构建过程相关:编译、测试、打包、…

  2. 常用命令
    【1】mvn clean :清理
    【2】mvn compile :编译主程序
    【3】mvn test一compile :编译测试程序
    【4】mvn test :执行测试
    【5】mvn package :打包
    【6】mvn install :安装
    【7】mvn site :生成站点

  3. 导入自己的jar到maven 仓库中(不常用)

    # Dfile 你要导入jar的全路径
    # DgroupId 一般是公司域名反写 + [ 项目名 ]
    # DartifactId 模块名 或者 项目名
    # Dversion 版本
    # Dpackaging 类型
    $ mvn install:install-file -Dfile="C:\Users\Administrator\Desktop\OrgPublic.jar" -DgroupId=myjar -DartifactId=OrgPublic -Dversion=1.0 -Dpackaging=jar
    

Maven 下载jar的过程

  1. Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成。而插件本身并不包含在Maven的核心程序中。

  2. 当我们执行的Maven命令需要用到某些插件时,Maven核心程序会首先到本地仓库中查找。

  3. 本地仓库的默认位置: 【系统中当前用户的家目录】.m2\repository

  4. Maven核心程序如果在本地仓库中找不到需要的插件,那么它会自动连接外网,到中央仓库下载。

  5. 如果此时无法连接外网,则构建失败。

  6. 修改默认本地仓库的位置可以让Maven核心程序到我们事先准备好的目录下查找插件
    【1】找到Maven解压目录\conf\settings.xml
    【2】在settings.xml文件中找到localRepository标签
    【3】将《localRepository》 /path/to/local/repo《/localRepository》从注释中取出
    【4】将标签体内容修改为已经准备好的Maven仓库目录

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9E1ouCrS-1590504002629)(自动化构建工具:Maven.assets/image-20200526210409210.png)]

POM 是什么意思

  1. 含义: Project Object Model项目对象模型
    DOM Document Object Model文档对象模型

  2. pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置。重要程度相当于web.xml对于动态Web工程

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DQezguMF-1590504002630)(自动化构建工具:Maven.assets/image-20200526210530380.png)]

  3. Maven工程坐标与仓库中路径的对应关系

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WUAr3IVL-1590504002630)(自动化构建工具:Maven.assets/image-20200526210602685.png)]

仓库

  1. 仓库的分类

    1. 本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务

    2. 远程仓库

      • 私服:搭建在局域网环境中,为局域网范围内的所有Maven工程服务
      • 中央仓库:架设在Internet上,为全世界所有Maven.工程服务
      • 中央仓库镜像:为了分担中央仓库的流量,提升用户访问速度
  2. 仓库中保存的内容: Maven工程
    【1】Maven自身所需要的插件
    【2】第三方框架或工具的jar包
    【3】我们自己开发的Maven工程

初步认识依赖

  1. Maven解析依赖信息时会到本地仓库中查找被依赖的jar包。
    对于我们自己开发的Maven工程,使用mvn install命令安装后就可以进入仓库。

  2. 依赖的范围

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cba5MnqJ-1590504002631)(自动化构建工具:Maven.assets/image-20200526211003404.png)]

    1. compile范围依赖

      • 对主程序是否有效:有效
      • 对测试程序是否有效:有效
      • 否参与打包:参与.
      • 是否参与部署:参与
      • 典型例子: spring一core
    2. test范围依赖

      • 对主程序是否有效:无效
      • 对测试程序是否有效:有效
      • 否参与打包:不参与
      • 是否参与部署:不参与
      • 典型例子: junit
    3. provided范围依赖

      • 对主程序是否有效:有效=对测试程序是否有效:有效

      • 是否参与打包:不参与

      • 是否参与部署:不参与

      • 典型例子: servlet一apijar

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MT0cuDze-1590504002632)(自动化构建工具:Maven.assets/image-20200526211149958.png)]

生命周期

  1. 各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。

  2. Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。

  3. Maven核心程序为了更好的实现自动化构建, 按照这一的特点执行生命周期中的各个阶段:不论现在要执行生命周期中的哪一个阶段,都是从这个生命周期最初的位开始执行。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8xlCj3Dw-1590504002632)(自动化构建工具:Maven.assets/image-20200526211251863.png)]

  4. 插件和目标

    1. 生命周期的各个阶段仅仅定义了要执行的任务是什么。
    2. 各个阶段和插件的目标是对应的。
    3. 相似的目标由特定的插件来完成。
    4. 可以将目标看到“调用插件功能的命令”
生命周期阶段 插件目标(可理解为命令) 插件
compile compile maven-compiler-plugin
test-compile testCompile maven-compiler-plugin

在IDEA 中使用Maven

打开IDEA点击设置选项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ENSJGiQS-1590504002633)(自动化构建工具:Maven.assets/image-20200526212804436.png)]

设置maven的家目录

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NLbe5tLH-1590504002634)(自动化构建工具:Maven.assets/image-20200526213016881.png)]

最好这么设置一下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NPf4Puwt-1590504002635)(自动化构建工具:Maven.assets/image-20200526213216730.png)]

依赖的高级

依赖的传递性

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wv8Bnspn-1590504002635)(自动化构建工具:Maven.assets/image-20200526213617463.png)]

  1. 好处:可以传递的依赖不必在每个模块工程中都重复声明,在”最下面”的工程中依赖一次即可。
  2. 注意:非compile范围的依赖不能传递。所以在各个工程模块中,如果有需要就得重复声明依赖。

依赖的排除

  1. 需要设置依赖排除的场合

    • server-api.jar 和 工作流的jar 起冲突,导致无法使用jstl。
  2. 依赖排除的设置方式

    <!-- 工作流 -->
    <dependency><groupId>org.activiti</groupId><artifactId>activiti-engine</artifactId><version>6.0.0</version><exclusions><!-- 排除juel-spi,会和tomcat下的servlet、jsp等jar有冲突 --><exclusion><groupId>de.odysseus.juel</groupId><artifactId>juel-spi</artifactId></exclusion></exclusions>
    </dependency>
    

依赖的原则(了解即可)

  1. 作用:解决模块工程之间的jar包冲突问题

  2. 情景设定1:验证路径最短者优先原则

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nDFmjFYy-1590504002636)(自动化构建工具:Maven.assets/image-20200526214123240.png)]

  3. 情景设定2:验证路径相同时先声明者优先

    • 向声明指dependecy 标签的声明顺序

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5lsNMDYM-1590504002637)(自动化构建工具:Maven.assets/image-20200526214137361.png)]

统一管理依赖的版本(常用)

  1. 情景:spring相关的jar都是一样的版本。我们能不能设置一个变量,直接使用变量指定版本号。方便我们替换spring 的版本。

  2. 实操:

     <!-- 这个标签可以定义很多的变量 --><properties><!-- 变量名 spring.version  变量值 4.3.10.RELEASE  --><spring.version>4.3.10.RELEASE</spring.version></properties><dependencies><!-- spring --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><!-- 使用方式使用 类似EL 的方式获取 --><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-orm</artifactId><!-- 如果不想使用统一的版本,直接写就行了,直接不用 --><version>4.3.10.RELEASE</version></dependency></dependencies>
    

继承

  1. 现状
    Hello依赖的junit : 4.0
    HelloFriend依赖的junit : 4.0
    MakeFriends依赖的junit : 4.9
    由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致。

  2. 需求:统一管理各个模块工程中对junit依赖的版本

  3. 解决思路:将junit依赖统一提取到"父”工程中,在子工程中声明junit依赖时不指定版本,以父工程中统一设定的为准。 同时也便于修改。

  4. 操作步骤

    1. 创建一个maven项目

    2. 选中这个maven项目,点击右键创建子模块,idea会自动帮我们设置好maven的父子依赖结构。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ealhlXPg-1590504002637)(自动化构建工具:Maven.assets/image-20200526215546222.png)]

  5. 在父工程中同一管理依赖

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GOnE82rQ-1590504002638)(自动化构建工具:Maven.assets/image-20200526215405144.png)]

聚合

  1. 作用:[一键编译 | 打包 | 安装]各个模块工程

  2. 配置方式:在一个“总的聚合工程”中配置各个参与聚合的模块

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ylh1S0kL-1590504002639)(自动化构建工具:Maven.assets/image-20200526215857668.png)]

  3. 使用方式:在聚合工程的pom.xml 上执行maven的命令

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bGJbs0iq-1590504002639)(自动化构建工具:Maven.assets/image-20200526215959825.png)]

Maven学习文档常用命令继承聚合相关推荐

  1. 手把手教最新最全最详细Git使用教程(图文并茂,附Git命令大全学习文档)

    导读 因为教程详细,所以行文有些长,新手边看边操作效果出乎你的预料.GitHub虽然有些许改版,但并无大碍. 最全Git命令学习文档下载(集合整理,非常适合新手) 一.Git是什么? Git是目前世界 ...

  2. Java web学习文档

    Java web 一,第一章 1,tomcat的下载及配置部署 学习本章内容需要具备以下知识点 java基础知识 面向对象oop思想 java进阶 数据库 前端网页技术(html/css/js/jqu ...

  3. Hadoop大数据平台实践(二):Hadoop生态组件的学习文档

    Hadoop基础组件学习-Yzg-2019-03-06 Hadoop基础组件学习文档.. 1 简介.. 4 HDFS. 5 HDFS读文件.. 6 HDFS写文件.. 7 Mapreduce 8 单词 ...

  4. linux个人学习文档

    Linux系统基础 第1章 Linux简介 1.1开源的力量 1.1.1 我们已经用过的开源软件 1.1.2 开源软件领域的旗帜:Linux 1.1.3 软件开源的好处 1.2 Linux的来历 1. ...

  5. IntelliJ IDEA 14,15 使用教程,实战总结,倾囊相授,内附PDF学习文档

    转载博文,尊重原创,感谢前辈分享,原文地址:"请叫我大师兄__"的CSDN博客主页 文章目录 前言 一.安装 二.使用 1.Debug 2.修改内存 3.一般设置 4.高级设置 5 ...

  6. 全网最全Flutter的学习文档,不可转载

    Flutter学习文档-Author:Brath 由于文章内容较干,请允许Brath打一波广告- 面试记APP Github:https://github.com/Guoqing815/intervi ...

  7. Ext JS 6学习文档-第3章-基础组件

    Ext JS 6学习文档-第3章-基础组件 基础组件 在本章中,你将学习到一些 Ext JS 基础组件的使用.同时我们会结合所学创建一个小项目.这一章我们将学习以下知识点: 熟悉基本的组件 – 按钮, ...

  8. Ext JS 6学习文档-第6章-高级组件

    Ext JS 6学习文档-第6章-高级组件 高级组件 本章涵盖了高级组件,比如 tree 和 data view.它将为读者呈现一个示例项目为 图片浏览器,它使用 tree 和 data view 组 ...

  9. 嵌入式Linux系统编程学习之二常用命令

    嵌入式Linux系统编程学习之二常用命令 文章目录 嵌入式Linux系统编程学习之二常用命令 前言 一.常用命令 1.su(用户切换) 2.useradd(添加用户) 3.passwd(修改密码) 4 ...

最新文章

  1. 【好文收藏】k8s中Pod 无法正常解析域名:部署 DNS 调试工具排查
  2. 08.update_by_query操作
  3. Redis 3.0.2集群搭建以及相关问题汇总
  4. dingo php,dingo 配置
  5. mysql binlog 订阅_数据库binlog订阅和消费组件canal快速入门
  6. 20190520算法题存档
  7. java static 块作用_java static块有什么具体的作用和注意事项?说具体点
  8. Python基础二--基本控制语句
  9. 三星note3 android4.3,真的8核全开了!Exynos版GS4升级安卓4.3
  10. AC97 与 HD audio的区别
  11. ps_图片大小精准裁剪
  12. Linux RT-PREEMPT的softirq机制
  13. 【项目三、车牌检测+识别项目】三、LPRNet车牌识别网络原理和核心源码解读
  14. 无需会员,百度云不限速下载!
  15. ArrayList源码分析与手写
  16. 淘宝直播的定义,淘宝直播小技巧介绍,以及淘宝有哪些推广渠道和展示位?
  17. 分析了网易云数十万歌单后写出2020年的最全歌单推荐
  18. 前端学习: 用css设置文字样式
  19. FICO_通过参考创建方式批量复制跨科目表的总账科目
  20. Android 性能优化(一) —— 启动优化提升60%

热门文章

  1. UNICODE工程中,由十六进制的unicode字符内码转换成unicode字符
  2. unity 检测电脑摄像头_Unity调用PC摄像头
  3. DITA与DocBook对比分析
  4. DITA达尔文信息类型化体系结构相关总结
  5. c语言十进制转换八进制和十六进制
  6. 04 Xcp 标定过程介绍
  7. 【二次开发】CityMaker几何体——面
  8. ios 贝塞尔曲线 颜色填充_iOS,贝塞尔曲线(UIBezierPath)
  9. 透明、半透明和不透明物体
  10. maven下载(国内镜像)