官网:http://maven.apache.org/
1)项目的自动构建,帮助开发人员做项目代码的编译,测试,打包,安装,部署等工作。
2)管理依赖(管理项目中使用的各种jar包)。
依赖:项目中需要使用的其他资源,常见的是jar。比如项目要使用mysql驱动。我们就说项目依赖mysql驱动。
地址: http://maven.apache.orgl 从中下载.zip文件。
1.确定JAVA_HOME指定jdk的安装目录,如果没有JAVA_HOME,需要在windows的环境变量中创建JAVA_HOME,它的值是jdk的安装目录
⒉解压缩apache-maven-3.6.3-bin.zip,把解压后的文件放到一个目录中。目录的路径不要有中文,不要有空格。
3.把maven安装目录中下的bin的路径添加到path中
4.测试maven的安装。在命令行执行mvn -v
1.确定JAVA_HOME是否有效
2在环境变量中,创建一个叫做M2_HOME (或者
MAVEN_HOME),它的值是maven的安装目录M2_HOME=D:\toolslapache-maven-3.3.9
3.在path环境变量中,加入%M2_HOME%\bin
4.测试maven的安装,在命令行执行mvh -v
两种方式本质上都是一样的,第二种更规范
mvn -v 查看maven版本
mvn -compile 编译
java 包名.文件名 执行某个java文件(在 项目名称\target\classes 执行命令)
Maven能够实现自动化构建是和它的内部原理分不开的,这里我们从
Maven的九个核心概念入手,
看看Maven是如何实现自动化构建的
①POM
②约定的目录结构
③坐标
④依赖管理
⑤仓库管理
⑥生命周期
⑦插件和目标
⑧继承
⑨聚合
maven项目有一个约定的目录结构
一个maven项目是一个文件夹,比如项目名为Star
Star 项目文件夹
\src
\main 主程序目录()
\java 源代码
\resources 配置文件
\test 放置测试代码
\java 测试代码(junit)
\resources 测试程序需要的配置文件
\pom.xml maven的配置文件
即Project Object Model项目对象模型。
Maven把一个项目的结构和内容抽象成一个模型,在xml文件中进行声明,以方便进行构建和描述,
pom.xml是 Maven的灵魂。所以,maven环境搭建好之后,所有的学习和操作都是关于pom.xml的。
<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">
<modelVersion>4.0.0modelVersion>
<!--坐标->
<groupId>com.stargroupId>
<artifactId>ch01-maven-javaartifactId>
<version>1.0version>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
properties>
project>
坐标组成是groupid, artifiactld, version。坐标概念来自数学。
坐标作用:确定资源的,是资源的唯一标识。在maven中,每个资源都是坐标。坐标值是唯一的。简称叫gav
<groupId>com.stargroupId>
<artifactId>ch01-maven-javaartifactId>
<version>1.0version>
<packaging>warpackaging>
groupId:组织名称,代码。公司,团体或者单位的标识。这个值常使用的公司域名的倒写。
例如:学校的网站www.xuexiao.com,groupId: com.xuexiao
如果项目规模比较大,也可以是域名倒写+大项目名称。
例如:www.baidu.com ,无人车:com.baidu.appo1lo
artifactId:项目名称,如果groupId中有项目,此时当前的值就是子项目名。项目名称是唯一的。
version: 版本,项目的版本号,使用的数字。三位组成。例如 主版本号.次版本号.小版本号。
例如5.1.2
注意:如果项目还在开发中,是不稳定版本,通常在版本后带-SNAPSHOT
项目使用gav:
1.每个maven项目,都需要有一个自己的gav
2.管理依赖,需要使用其他的jar ,也需要使用gav作为标识。
maven仓库
https://mvnrepository.com/
依赖:项目中要使用的其他资源(jar)。
需要使用maven表示依赖,管理依赖。通过使用dependency和gav一起完成依赖的使用
需要在pom.xml文件中,使用dependencies和dependency,还有gav完成依赖的说明。
格式:
<dependencies>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.16version>
dependency>
dependencies>
maven使用gav作为标识,从互联网下载依赖的jar。下载到你的本机上。由maven管理项目使用的这些jar
packaging项目打包的类到有jar , war , ear,pom等等默认是jar
仓库是存东西的,maven的仓库存放的是:
1.maven工具自己的jar包。
⒉第三方的其他jar,比如项目中要使用mysql驱动。
3.自己写的程序,可以打包为jar。存放到仓库。
1.本地仓库(本机仓库)∶位于你自己的计算机,它是磁盘中的某个目录。本地仓库:默认路径,是你登录操作系统的账号的目录中/.m2/repository
C : \Users\Star.m2\repository
修改本地仓库的位置:修改maven工具的配置文件(maven的安装路径\conflsetting.xml)步骤:
1)创建一个目录,作为仓库使用。目录不要有中文和空格。目录不要太深。
例如:E:\repo
2)修改setting.xml文件,指定E:\repo这个目录
<localRepository>E:\repolocalRepository>
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
将以上内容放入settings.xml文件中的mirrors标签下
maven的生命周期 : 项目构建的各个阶段。包括清理,编译,测试,报告,打包,安装,部署
插件 : 要完成构建项目的各个阶段,要使用maven的命令,执行命令的功能是通过插件完成的。插件就是jar,一些类。
命令 : 执行maven功能是由命令发出的。比如mncompile
junit是一个单元测试的工具,在iava中经常使用。
单元:在java中指的是方法。一个方法就是一个单元,方法是测试的最小单位。
作用:使用junit去测试方法是否完成了要求。开发人员自测。
使用单元测试
1)加入junit的依赖
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
2)在src/test/java目录中创建测试类文件。写测试代码单元测试使用的建议:
1.测试类的定义,名称一般是Test+要测试的类名称
⒉.测试类它的包名和要测试的类包名一样。
3.在类中定义方法,要测试代码。
方法的定义: public方法,
没有返回值
方法名称自定义(建议Test+测试的方法名称)
方法没有参数
4.在测试类中的方法,可以单独执行。测试类也可以单独执行
5.在方法的上面加上@Test
import org.junit.Assert;
import org.junit.Test;
public class TestHelloMaven {
@Test
public void testAddNumber1(){
System.out.println("testAddNumber1111111111111111");
HelloMaven hello = new HelloMaven();
int res = hello.addNumber(10,20);
Assert.assertEquals(30, res);
}
@Test
public void testAddNumber2(){
System.out.println("testAddNumber22222222222222222");
HelloMaven hello = new HelloMaven();
int res = hello.addNumber(10,20);
Assert.assertEquals(30, res);
}
}
注意:执行以下命令必须在命令行进入pom.xml所在目录!
mvn clean:清理命令,作用删除以前生成的数据,删除target目录。
插件: maven-clean-plugir,版本是2.5
mwn compile:编译命令,执行的代码编译,把src/main/iava目录中的jaxa代码编译为class文件。同时把class文件拷贝到 target/classes目录。这个目录classes是存放类文件的根目录〈也叫做类路径,classpath)
涉及的插件:
maven-compiler-plugin版本3.1。编译代码的插件
maven-resources-plugin版本2.6。资源插件,处理文件的。作用是把src/main/resources目录中的文件拷贝到target/classes目录中.
mvn test-compile : 编译命令,编译src /test/iava目录中的源文件,把生成的class拷贝到target/test-classes目录。同时把src/test/resources目录中的文件拷贝到test-clasess目录
涉及的插件:
maven-compiler-plugin版本3.1。编译代码的插件
maven-resources-plugin版本2.6。资源插件,处理文件的
mvn test : 测试命令,作用执行test-classes目录的程序,测试src/main/java目录中的主程序代码是否符合要求。
涉及的插件: maven-surefire-plugin版本 2.12.4
mvn package : 打包,作用是把项目中的资源class文件和配置文件都放到一个压缩文件中,默认压缩文件是jar类型的。web应用是war类型,扩展是jar, war的。
涉及的插件: maven-jar-plugin版本2.4。执行打包处理。生成一个jar扩展的文件,放在target目录下
打包的文件包含的是 src/main目录中的所有的生成的class和配置文件和test无关。
生成的是Test-1.0-SNARSHOT.jar
<groupId>com.stargroupId>
<artifactId>TestartifactId>
<version>1.0-SNARSHOTversion>
<packaging>jarpackaging>
打包的文件名 : artifactId.1.0-SNARSHOT.packaging
6)mvn install:把生成的打包的文件,安装到maven仓库。
涉及的插件: maven-install-plugin版本2.4。把生成的jar文件安装到本地仓库。
查看查看中的jar文件:
<groupId>com.stargroupId>
<artifactId>TestartifactId>
<version>1.0-SNARSHOTversion>
<packaging>jarpackaging>
groupId中的值,如果有“.”前和后都是独立的文件夹。com\star
artifactId,独立的文件夹
version,独立的文件夹
一般来说打包时先clean再package mvn clean package
在pom.xml文件中, build标签中。设置插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.8.1version>
<configuration>
<source>1.8source>
<target>1.8target>
configuration>
plugin>
plugins>
build>
依赖范围:使用scope表示依赖的范围。
依赖范围表示:这个依赖(jar和里面类)在项目构建的那个阶段起作用。
依赖范围scope :
compile:默认,参与构建项目的所有阶段
test:测试,在测试阶段使用,比如执行mvn test会使用junit 。
provided:提供者。项目在部署到服务器时,不需要提供这个依赖的jar,而是由服务器这个依赖的jar包
明显的是servlet 和jsp依赖
<properties>
<maven.compiler.source>1.8maven.compiler.source> 源码编译 jdk 版本
<maven.compiler.target>1.8maven.compiler.target> 运行代码的 jdk 版本
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding> 项目构建使用的编码,避免中文乱码
<project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding> 生成报告的编码
properties>
在properties定义标签,这个标签就是一个变量,标签的文本就是变量的值。
使用全局变量表示多个依赖使用的版本号。
使用步骤:
1.在properties标签中,定义一个标签,指定版本的值
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<spring.version>4.3.10.RELEASEspring.version>
<junit.version>4.11junit.version>
properties>
2.使用全局变量,语法${变量名}
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-contextartifactId>
<version>${spring.version}version>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>${junit.version}version>
<scope>testscope>
dependency>
3.使用资源插件
处理的配置文件的信息, maven默认处理配置文件
(1): maven会把src/main/resources目录中的文件,拷贝到target/classes目录下
(2): maven只处理src/main/iava目录中的.java文件,把这些java文件编译为class,拷贝到target/classes目录中。不处理其他文件。
<build>
<resources>
<resource>
<directory>src/main/javadirectory>
<includes><!--包括目录下的.properties,.xml 文件都会扫描到- ->
<include>**/*.propertiesinclude>
<include>**/*.xmlinclude>
includes>
<filtering>falsefiltering>
resource>
resources>
build>