一、概述一

1、介绍

  • apache组织提供的顶级项目
  • 但凡是阿帕奇提供的技术,都是由java开发工具
  • 项目的管理工具

    2、完成一个java项目需要做那些工作

  • 项目要做什么,项目组成部分

  • 设计项目,步骤,使用哪些技术,需要多少人,多长时间
  • 组建团队,招人,购置设备,服务器,软件,笔记人…..
  • 开发人员编写代码,开发人员需要测试
  • 测试人员再次进行测试,测试项目功能是否符合要求

Maven可以使我们做上面/下面这些功能更加简单

3、对比

传统开发项目【没有使用maven】

  • 很多模块,模块之间的关系,手动管理十分繁琐
  • 项目需要第三方功能【jar包】 需要手动从网络中获取各个jar包
  • 手动管理jar包的版本
  • 手动管理jar文件之间的依赖 【项目要使用a.jar需要使用b.jar里面的类】

使用maven管理的项目

  • 可以管理jar文件,自动下载jar和他的文档,源代码
  • 自动管理jar之间的依赖 【a.jar需要b.jar maven会自动下载】
  • 自动管理jar版本
  • 帮你编译程序 .java —-> .class
  • 帮你测试你的代码 是否正确
  • 帮你打包文件,形成jar文件或war文件
  • 帮你部署项目

二、概述二

1、什么是构建

项目的构建 【面向过程的,就是一些步骤】
完成项目代码的编译,测试,打包,部署

2、maven所支持的构建:

  • 清理 【把之前项目编译的东西删除掉,为新的编译代码做准备】
  • 编译 【把源代码编译为可执行代码 .java—>.class 批量编译】
    • 一次性的编译成千上百个文件,和javac 不一样 javac只能一次一个
  • 测试 【maven可以执行测试程序代码,验证你的功能是否正确。】
    • 批量的,maven可以同时执行多个测试代码,同时测试很多功能
  • 报告 【生成测试结果的文件,测试通过没有】
  • 打包 【把你的项目中所有的calss文件,配置文件等所有资源放到一个压缩文件中】
    • 这个压缩文件就是项目的结果文件,通常java程序的压缩文件都是jar后缀 .jar
    • 对于web应用 那么他的压缩文件是 .war
  • 安装 【把5中生成的文件 jar文件或war文件安装到仓库之中】
  • 部署 【把程序安装好可以执行】

    3、maven是如何管理jar包的

    首先在【本地仓库】 —— >【私服】 ——> [镜像中央仓库]——->【中央仓库】

    4、作用

  • 管理项目构建生命周期

  • 管理项目中的jar包
  • 管理项目中的基础信息(文档管理,测试报告)

    5、maven的使用方式

  • 独立使用maven,使用maven的各种命令,完成代码的编译、测试、打包等。

  • 结合开发工具使用 在IDEA中使用maven 简单快捷 不需要记忆命令

三、安装和配置及核心

1、maven工具的安装和配置

需要从maven的官网下载maven的安装包 【用maven必须先配置好jdk】

目录

  • bin 放可执行程序,主要是 mvn.cmd
  • conf setting.xml maven工具本身的配置文件

配置环境变量

  • 在系统的环境变量中指定一个 M2_HOME的名称,指定他的值是maven工具安装目录,bin之前的目录。
  • 把M2_HOME加入到path之中 %M2_HOME%\bin\

    2、验证以下maven是否配置成功

    在cmd窗口中输出 mvn -v【查看maven的版本】
    注意 电脑上一定要有 JAVA_HOME JDK环境变量
    出现以下内容说明maven配置成功
    Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
    Maven home: E:\javaWeb\Maven\apache-maven-3.6.3\bin..
    Java version: 13.0.2, vendor: Oracle Corporation, runtime: D:\java
    Default locale: zh_CN, platform encoding: GBK
    OS name: “windows 10”, version: “10.0”, arch: “amd64”, family: “windows”

四、Maven核心概念

1、总体

  • POM
    • 一个文件 名称是pom.xml
    • pom翻译过来是项目对象模型
    • maven把一个项目当作一个模型使用,控制maven构建项目的过程,管理jar依赖
  • 约定的目录结构
    • maven项目的目录和位置是有规定的
  • 坐标
    • 是一个唯一的字符串,用来表示资源的。
  • 依赖管理
    • 用来管理你的项目中可以使用的jar包
  • 仓库管理
    • 资源存放的位置
  • 生命周期
    • maven构建项目的过程
  • 插件和目标
    • 执行maven构建的时候,用的工具是插件
  • 继承
  • 集合

2、maven约定的目录结构

每一个maven的项目在磁盘中都是一个文件夹

  • Hello/ // 项目名
  • **----/src**
  • ---------/main // 放置主程序目录
  • -----------------/java // 放程序的包 和包中的java文件
  • -----------------/resources //java程序中要使用的配置文件
  • ---------/test // 放测试程序代码和文件
  • -----------------/java // 放测试的包 和包中的java文件
  • -----------------/resources //测试程序中要使用的配置文件
  • **----/pom.xml** // maven的核心文件(必须有) 向maven要jar包
  • **----/target** // 编译后的class文件 不需要创建 maven命令在执行时自动创建

执行mvn compile【编译】 结果是在项目的根目录下自动生成target目录 【结果目录】 maven生成的class文件都存在于里面

3、仓库

3.1 修改本地仓库地址

本地仓库默认位置: C://用户/登录用户名称/.m2/resporsitory
修改本地仓库的位置
修改maven配置文件 conf/settings.xml
修改前先备份一份

  • 第二步 修改53行指定你的目录【不要使用中文目录】
    • E:\javaWeb\Maven\maven_repository

不要有中文,不要有空格

3.2 仓库是什么

  • 存放 maven使用的jar和我们项目中使用的jar
  • maven 使用的插件(各种jar)

  • 我们项目中使用的jar(第三方的工具)

    3.3 仓库的分类

  • 本地仓库, 在计算机上的文件夹,存放各种jar

  • 远程仓库, 在互联网上使用网络才能使用的仓库
    • 中央仓库 最权威的,世界上所有的开发人员都共享使用的集中的仓库

https://repo.maven.apache.org

  • 中央仓库的镜像 在各大洲的重要城市中都有镜像,用户使用时,优先使用镜像
  • 私服 在公司内部 局域网中使用,不对外使用

    3.4 仓库的使用

  • maven仓库的使用不需要人为参与
  • 开发人员使用mysql的驱动时—->maven首先查本地仓库——>查私服 ——> 中央仓库镜像——>中央仓库

    4、POM 项目对象模型

    pom.xml 文件 maven的核心
    maven环境搭建好之后,所有的学习和操作都是关于pom.xml的
    坐标【唯一值】

  • 为了方便maven对jar的定位,在maven的世界中,每一个jar都有一个独立的坐标,相当于ip

    4.1 gav

  1. groupId 【自定义】组织id,一般是公司域名的倒写 com.yixuexi.autoStudy
  2. artifactId 【自定义】 项目名称 也是模块名称给 对应groupId中项目中的子项目【名字可以不一样】
  3. version 【自定义】版本号, 例如1.0.0 【-SNAPSHOT 后面添加表示快照】

这三个组成在一起就是一个坐标 【标识一个项目】
在互联网上唯一标识一个项目
https://mvnrepository.com 搜索使用的中央仓库, 使用groupId/artifactId作为搜索

为什么maven非要把坐标弄成唯一的?

  • 因为maven是想把所有的jar包都弄成世界上独一份,不会有重复。这样通过公司域名的倒写,和项目名外加 版本号组合在一起 就能保证这个jar包世上独一份
  • 这样的话在使用jar包的时候,就不会出现相同名称的jar包问题了

properties

  • 定义一些配置文件

bulid

  • 表示与构建相关的配置,例如设置jdk的版本

5、依赖

  1. <dependencies></dependencies>
  2. 依赖 在项目中用到的各种资源【jar包之类的】
  3. <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
  4. <dependency>
  5. <groupId>mysql</groupId>
  6. <artifactId>mysql-connector-java</artifactId>
  7. <version>5.1.47</version>
  8. </dependency>
  9. - 上面的信息来自于 中央仓库 , 把 g a v 复制到dependecies中即可
  10. - 相当于java中的import 可添加多个
  11. - maven用来管理jar包,使用依赖可以把jar包引入到项目中

maven生命周期/插件

生命周期:清理,编译,测试,报告,打包,安装,部署
插件:maven提供的功能,用来执行清理,编译……的一些程序

五、常见命令、插件

1、生命周期

maven构建项目的过程,清理,编译,测试,报告,打包,安装,部署

2、常见命令

maven可以独立使用,通过命令来完成 maven 生命周期的执行

  • **mvn clean** 清除 删除当前工程中的target文件夹
  • **mvn compile** 编译 将当前工程中main文件夹下所有的java类编译为class,输送到target/classes中

同时把main/resources目录下的所有文件都拷贝到 target/classes目录下

  • **mvn test-compile** 编译测试文件 把编译好的测试文件放到 target/testclasses
  • **mvn test** 测试 调用maven工程下 test文件夹下,所有测试类的所有测试方法,并生成测试报告 【执行测试的之后,前面的都会自动做一遍】
  • **mvn package** 打包 先自己测试一遍【test中的java类】,没问题打成jar包或war包【class文件】, 输送到当前的target中去
  • **mvn install** 安装 和 mvn package基本一致, 只是将jar包/war包推送到maven本地仓库中
  • **mvn deploy** 部署

    3、插件

    maven命令执行时,真正完成功能的是插件【jar文件】

    3.1 单元测试

  • 什么是单元测试

  • junit是一个专门测试的框架(工具)
  • 测试的是类中的方法,每一个方法都是独立测试的(都要写独立的测试方法)
  • 方法是测试的基本单位(单元)
  • maven借助单元测试,批量的测试类中的大量方法是否符合预期

    3.2 如何使用?

    1. 加入依赖 在pom.xml中加入单元测试依赖
    2. <!-- https://mvnrepository.com/artifact/junit/junit -->
    3. <dependency>
    4. <groupId>junit</groupId>
    5. <artifactId>junit</artifactId>
    6. <version>4.12</version>
    7. <scope>test</scope>
    8. </dependency>
    9. 在maven项目中的src/test/java目录下,创建测试程序

    3.3 推荐方式

    测试类的名称是 Test+要测试的类名
    测试方法的名称是 test+要测试的方法名称

    3.4 规则

  1. 方法是public
  2. 方法没有返回值
  3. 方法的名称是自定义的 推荐 test+要测试的方法名
  4. 方法的上面加上注解 @Test

    3.5 验证

    Assert.assertEquals(30,value) // 第一个参数是期望值,第二个参数为实际值
    如果两个值 相等说明是正确,如果不等就抛出异常
    main里面的包名在test中也要有,也就是说测试里面也按照 com.yixuexi

4、依赖管理

<scope></scope> 表示依赖使用的范围
在maven构建项目的那些阶段中起作用
清理,编译,测试,打包,安装,部署 【阶段】

<scope>``**test**``</scope> 表示在执行测试的时候才会起作用
scope的值有

  • 默认 **compile**
    • 所有的阶段都要用到,并不是只在编译阶段
  • **test**
  • **provided**

    • 提供者 【打包,安装时不需要】

      5、maven的常用操作

      maven的属性设置
      properties 设置maven的常用属性
      maven的全局变量
  • 自定义属性

    • 在properties中通过自定义标签 声明变量(标签名就是变量名)
    • <spring.version>1.1.2</spring.version>
    • 在pom.xml文件中的其他位置,使用 ${标签名} 使用变量的值
  • 自定义的作用
    • 一般是定义以来的版本号,当项目中使用多个相同的版本号,先使用全局变量定义,再使用${变量名}

资源插件