一、概述一
1、介绍
- apache组织提供的顶级项目
- 但凡是阿帕奇提供的技术,都是由java开发工具
-
2、完成一个java项目需要做那些工作
项目要做什么,项目组成部分
- 设计项目,步骤,使用哪些技术,需要多少人,多长时间
- 组建团队,招人,购置设备,服务器,软件,笔记人…..
- 开发人员编写代码,开发人员需要测试
- 测试人员再次进行测试,测试项目功能是否符合要求
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)
-
3.3 仓库的分类
本地仓库, 在计算机上的文件夹,存放各种jar
- 远程仓库, 在互联网上使用网络才能使用的仓库
- 中央仓库 最权威的,世界上所有的开发人员都共享使用的集中的仓库
- maven仓库的使用不需要人为参与
开发人员使用mysql的驱动时—->maven首先查本地仓库——>查私服 ——> 中央仓库镜像——>中央仓库
4、POM 项目对象模型
pom.xml 文件 maven的核心
maven环境搭建好之后,所有的学习和操作都是关于pom.xml的
坐标【唯一值】为了方便maven对jar的定位,在maven的世界中,每一个jar都有一个独立的坐标,相当于ip
4.1 gav
- groupId 【自定义】组织id,一般是公司域名的倒写 com.yixuexi.autoStudy
- artifactId 【自定义】 项目名称 也是模块名称给 对应groupId中项目中的子项目【名字可以不一样】
- version 【自定义】版本号, 例如1.0.0 【-SNAPSHOT 后面添加表示快照】
这三个组成在一起就是一个坐标 【标识一个项目】
在互联网上唯一标识一个项目
https://mvnrepository.com 搜索使用的中央仓库, 使用groupId/artifactId作为搜索
为什么maven非要把坐标弄成唯一的?
- 因为maven是想把所有的jar包都弄成世界上独一份,不会有重复。这样通过公司域名的倒写,和项目名外加 版本号组合在一起 就能保证这个jar包世上独一份
- 这样的话在使用jar包的时候,就不会出现相同名称的jar包问题了
properties
- 定义一些配置文件
bulid
- 表示与构建相关的配置,例如设置jdk的版本
5、依赖
<dependencies></dependencies>
依赖 在项目中用到的各种资源【jar包之类的】
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
- 上面的信息来自于 中央仓库 , 把 g a v 复制到dependecies中即可
- 相当于java中的import 可添加多个
- 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本地仓库中-
3、插件
3.1 单元测试
什么是单元测试
- junit是一个专门测试的框架(工具)
- 测试的是类中的方法,每一个方法都是独立测试的(都要写独立的测试方法)
- 方法是测试的基本单位(单元)
- maven借助单元测试,批量的测试类中的大量方法是否符合预期
3.2 如何使用?
加入依赖 在pom.xml中加入单元测试依赖
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
在maven项目中的src/test/java目录下,创建测试程序
3.3 推荐方式
测试类的名称是 Test+要测试的类名
测试方法的名称是 test+要测试的方法名称3.4 规则
- 方法是public
- 方法没有返回值
- 方法的名称是自定义的 推荐 test+要测试的方法名
- 方法的上面加上注解 @Test
3.5 验证
Assert.assertEquals(30,value)
// 第一个参数是期望值,第二个参数为实际值
如果两个值 相等说明是正确,如果不等就抛出异常
main里面的包名在test中也要有,也就是说测试里面也按照 com.yixuexi
4、依赖管理
<scope></scope>
表示依赖使用的范围
在maven构建项目的那些阶段中起作用
清理,编译,测试,打包,安装,部署 【阶段】
<scope>``**test**``</scope>
表示在执行测试的时候才会起作用
scope的值有
- 默认
**compile**
- 所有的阶段都要用到,并不是只在编译阶段
**test**
**provided**
自定义属性
- 在properties中通过自定义标签 声明变量(标签名就是变量名)
<spring.version>1.1.2</spring.version>
- 在pom.xml文件中的其他位置,使用 ${标签名} 使用变量的值
- 自定义的作用
- 一般是定义以来的版本号,当项目中使用多个相同的版本号,先使用全局变量定义,再使用${变量名}
资源插件