1.Maven简介
1.1Maven能做什么
1)项目的自动构建,能帮助开发人员做项目代码的编译,测试,打包,安装,部署等工作。
2)管理依赖(管理项目中使用的各种jar包)
什么是依赖?
项目中需要使用的其他资源,常见的是jar。比如项目要使用mysql驱动。我们称项目依赖mysql驱动。
1.2 什么是maven
maven是项目的自动化构建工具,对于生产环境下多框架,多模块整合开发有着重要作用,管理项目的依赖。
1.3 maven中的概念
-
POM
-
约定的目录结构
-
坐标
-
依赖管理
-
仓库管理
-
生命周期
-
插件和目标
-
继承和聚合
2.Maven的核心概念
1.约定的目录结构
maven项目使用的大多数人遵循的目录结构-叫做约定的目录结构。
一个maven项目是一个文件夹,比如Hello项目
Hello 项目文件夹
\src
\main 主程序目录-完成项目功能的代码和配置文件
\java 源代码(包与相关类)
\resources 配置文件
\test 放置测试程序代码的
\java 测试代码
\resources 测试程序需要的配置文件
\pom.xml maven的配置文件(核心文件)
maven可以独立使用,创建项目,编译代码,测试程序,打包等。
maven和idea一起使用,通过idea借助maven,实现编译,测试,打包等。
2.POM文件
Project Object Model项目对象模型。Maven把一个项目的结构和内容抽象成一个模型,在xml文件中声明,方便进行构建和描述。
maven通过pom.xml文件实现项目的构建和依赖的管理。
<?xml version="1.0" encoding="UTF-8"?>
<!--project是根标签,后面是约束文件-->
<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">
<!--pom模型的版本-->
<modelVersion>4.0.0</modelVersion>
<!--坐标-->
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<properties>...</properties>
</project>
3.坐标
坐标组成:groupId,artifactId,version。
坐标作用:确定资源的,是自愿的唯一标识。maven中,每个资源都是坐标,坐标值是唯一的,简称gav。
<groupId>...</groupId>
groupId:组织名称,代码。公司,团体或者单位的标识。这个值常使用公司域名的倒写。
cn.edu.cuit
<artifactId>...</artifactId>
artifactId:项目名称,如果groupId中有项目,此时当前的值就是子项目名。
项目名称是唯一的。
<version>...</version>
version:版本,项目的版本号,三位组成(主版本号,次版本号,小版本号)
版本号有-SNAPSHOT,表示快照,是不稳定的版本
搜索坐标的地址:maven仓库
4.依赖dependency
依赖:项目中要使用的其他资源-jar。
通过使用dependency和gav一起完成依赖的使用。
需要在pom.xml文件中,使用dependencies和dependecy,还有gav完成依赖的说明
格式:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
</dependencies>
maven使用gav作为标识,从互联网下载依赖的jar包。
5.打包类型
packaging 项目打包的类型,可以是jar,war,rar,ear,pom,默认为jar。
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<packaging>...</packaging>
放置于本项目的坐标之下。
6.仓库
仓库是存东西的,maven的仓库存放的是
-
maven工具自己的jar包
-
第三方的其他jar,比如项目中要使用的mysql驱动
-
自己写的程序,可以打包为jar,存放到仓库
仓库的分类:
-
远程仓库
中央仓库:当建立一个Maven工程的时候,Maven会检查pom.xml中的依赖信息,并在本地仓库获得依赖资源,如果没有找到,然后会从默认中央仓库查找下载。
中央仓库的镜像,就是中央仓库的备份。
私服:在局域网中使用的。私服就是自己的仓库服务器,在公司内部使用的。
-
本地仓库:位于自己的计算机上,是磁盘中的某个目录
默认路径,为自己登陆操作系统的账号的目录:
C:\Users\86185\.m2\repository
这是我的机器上的
修改本地仓库的位置:修改maven安装路径中conf\setting.xml
<localRepository>D:\maven\repository</localRepository>
仓库的工作方式:
7. 生命周期,插件和命令
maven的生命周期:项目构建的各个阶段。包含 清理,编译,测试,报告,打包,安装,部署
插件:要完成构建项目的各个阶段,要使用maven的命令,执行命令的功能是通过插件完成。插件就是jar,一些类。
命令:执行maven功能是由命令发出的。
单元测试
junit是一个单元测试工具,在java中经常使用。
单元:在java中指的是方法,一个方法就是一个单元,方法是测试的最小单位。
作用:使用junit去测试方法是否完成了要求,开发人员自测。
使用:
1)加入junit的依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
2)在src/test/java目录下创建测试类文件
建议:1.测试类的定义,名称一般是Test+要测试的类名称
2.测试类它的包名和测试的类包名一样
3.在类中定义方法,要测试代码。
方法定义:public方法
没有返回值
方法名称自定义,方法没有参数
4.在测试类中的方法,可以单独执行,测试类也可以单独执行
5.在方法上加入一个@Test
命令
1)mvn clean: 清理命令,作用删除以前生成的数据,删除target目录
2)mvn compile:编译命令,执行的代码编译,把src/main/java目录中的java代码编译为class文件。
同时还要把class文件拷贝到target/classes目录下。这个目录classes是存放类文件的根目录。
3)mvn test-compile:编译命令,编译src/test/java目录中的源文件,把生成的class拷贝到target/test-classes目录。同时把src/test/resources目录中的文件拷贝到test-classes目录中。
4)mvn test:测试命令,作用执行test-classes目录的程序,测试src/main/java目录中的主程序代码是否符合要求。
5)mvn package:打包,作用是把项目中的资源class文件和配置文件都放到一个压缩文件中,默认压缩文件是jar类型的,web应用是war类型,扩展是jar,war的。
6)mvn install:把生成的打包文件,安装到maven仓库当中。
7)mvn deploy:部署主程序。
(上述所有命令的执行都必须在命令行进入pom.xml所在目录)
3.Maven在IDEA中的应用
1.idea中集中maven
1)maven安装目录
2)maven安装目录\conf\settings.xml
3)idea会获取settings.xml文件的内容,获取到本地仓库的位置
1)maven创建项目时,会从网络中下载一个archetype-catalog.xml作为项目的模板文件
archetypeCatalog=internal表示不用下载文件,加快创建maven项目的速度。
2)jdk信息
2.创建基于maven的普通项目
3.创建web项目
4.依赖管理
依赖范围
使用scope表示依赖的范围。
依赖范围表示:这个依赖(jar和里面类)在项目构建的哪个阶段起作用。
依赖范围scope:
compile默认,参与构建项目的所有阶段
test:测试,在测试阶段使用,比如执行mvn test会使用junit
provided:提供者,项目在部署到服务器时,不需要提供这个依赖的jar,而是由服务器这个依赖的jar包。
5.常用设置
1)properties里面的配置
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
项目构建使用的编码,避免中文乱码 <maven.compiler.source>1.8</maven.compiler.source>源码编译jdk版本
<maven.compiler.target>1.8</maven.compiler.target>运行代码的jdk版本
<project.reporting.outEncoding>UTF-8</project.reporting.outEncoding> 生成报告的编码
</properties>
2)全局变量
在properties定义标签,这个标签就是一个变量,标签的文本就是变量的值。
使用全局变量表示多个依赖使用的版本号。
使用:
1.在properties标签中,定义一个标签,指定版本的值
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target>
<!--自定义变量-->
<spring.version>5.2.5.RELEASE</spring.version>
</properties>
2.使用全局变量,语法 ${变量名}
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>