01-Maven工具详解
1、什么是Maven?
Maven是一个自动化构建工具
--完成一个Java项目需要做的工作:
1、分析项目要做什么,分几个组成模块
2、涉及项目,通过哪些步骤,使用什么技术,需要的人力多少。花费时间多少
3、组件团队,招人,购置设备,服务器,软件,电脑等。
4、开发人员编写代码并测试自己的代码,重复多次
5、测试人员,测试项目功能是否符合要求
测试人员测试提交的代码->测试有问题->让开发人员修改->再次提交代码测试人员测试->若还有问题打回再次修改,测试
多次直到没有问题->测试代码通过
--传统项目开发不使用Maven管理项目会出现的问题
1、项目有许多的模块,模块之间由联系,需要手工管理这些关系,很繁琐
2、需要很多第三方功能,即jar包,各个jar文件需要自己从网络中下载,一个项目需要的jar文件是很多的
3、需要管理jar的版本,例如有时候需要的mysql驱动是5.1.5版本的,这时就不能下载其他版本的,不然可能就用不了
4、需要管理jar包之间的依赖,例如使用mybatis框架需要添加mybatis-3.5.2.jar,当我们需要用mybatis框架实现输
出日志的的功能时,mybatis框架又需要log4j组件的jar包,就是说jar包有时可以完成一些功能,但有些功能jar包又得
依赖其他jar包才能完成。这样我们就得下载所需jar包依赖jar包,要做的事成倍增加。
--我们称这个a.jar包需要那个b.jar包的关系叫做依赖,或者项目中需要MySQL驱动,可以称之为项目依赖MySQL驱动
底层就是a.class需要使用b.class,a依赖b
--使用Maven进行项目开发的优点
1、Maven有个maven仓库,管理jar文件
2、自动下载所需jar包及其文档、源代码
3、管理jar包的直接依赖,自动帮你下好jar包的依赖jar包
4、可以管理需要的jar版本
5、帮助编译程序,将java编译为class
6、可以测试代码是否正确
7、可以帮助打包文件,形成jar包或war文件
8、帮助部署项目
--项目的构建
上面优点中的5、6、7、8过程就是项目的构建
构建是面向过程的,即一些步骤,这些步骤完成项目代码的编译、测试、运行、打包、部署等等。
--Maven支持的构建步骤包括:
1、清理,把之前项目编译的东西删掉,为新的编译代码做准备
2、编译,将项目的源代码编译为可执行代码,即.java->.class
这个步骤在maven中是批量的,可同时将成百上千的的文件编译为class文件
而javac一次只能编译一个
3、测试,执行测试程序的代码,验证功能是否正确
批量的,maven可同时执行多个测试程序的代码,同时测试多个功能
4、报告,对上面测试生成测试结果文件,可以查看测试是否通过
5、打包,将项目中所以的class文件、配置文件等一系列资源文件放到一个压缩文件中。
这个压缩文件就是项目的结果文件,普通的Java程序,打包成.jar文件。而web应用项目打包成.war文件
6、安装,将5中的jar、war文件安装到本机仓库
7、部署,程序安装好后可以执行了(部署一般不用maven操作,自己手动都方便些)
2、Maven的核心概念
一共有九个:
1、--POM文件
POM文件,名称为pom.xml,pom(Project Object Model)翻译过来就是项目对象模型
maven把项目当作一个模型使用,该文件作用就是控制maven构建项目过程以及管理jar依赖的功能。
2、--约定的目录结构
表示maven项目的目录和所需各种资源文件存放位置都是规定好的
3、--坐标
是一个唯一字符串,用来表示资源
4、--依赖管理
管理项目中可以使用的jar包
5、--仓库管理(了解)
资源存放的位置
6、--生命周期(了解)
maven工具构建项目的过程
7、--插件和目标(了解)
执行maven构建的时候用的工具是插件
下面两个概念以后学
8、--继承
9、--聚合
maven的使用学习,先学习maven命令的使用来完成maven的使用,然后学习在idea中使用maven
3、maven工具的下载与安装
1)下载
从apache官网下载maven的zip文件安装包apache-maven-3.3.9.zip(用的最多,对应的是JDK1.8)
解压到一个maven的文件夹。打开后在bin目录下,如下
其中的mvn.cmd就是一个命令,能够执行maven的项目构建功能。
打开conf目录,如下
其中的settings.xml是maven工具的配置文件。
然后就是lib目录,里面可以看到很多的jar包,maven是用java语言写的,所以需要配置好JDK才能构使用maven
2)配置环境变量
1、在环境变量中创建一个变量名为M2_HOME(很熟悉,跟配置Tomcat一样,称为maven的家)
值路径到解压的maven的bin目录上一级,就是maven的家。
M2_HOME=E:\maven\apache-maven-3.3.9
2、然后在path中新增变量路径,路径为:E:\maven\apache-maven-3.3.9\bin,
也可以用M2_HOME代替,如在path路径前面添加路径:%M2_HOME%\bin
3、--验证
dos命令窗口执行:mvn -v
成功:
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: E:\maven\apache-maven-3.3.9
Java version: 1.8.0_271, vendor: Oracle Corporation
Java home: E:\JAVASE1.8\jre
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
--(这样我们在这台计算机中不借助任何工具就可以单独使用maven了)
4、maven约定的项目目录结构
1)约定:就是大家都遵从的一个规则
--每一个maven项目在磁盘中都是一个文件夹:假设这里项目名为 Hello,目录结构如下
Hello/
---/src
------/main #存放主程序java代码和配置文件
---------/java #程序中创建的包和包中的Java代码文件
---------/resources #Java程序中需要用到的配置文件(如SQL映射文件)
------/test #存放测试的程序代码和配置文件(不强制要求一定要有)
---------/java #测试程序的包和包中的Java代码文件
---------/resources #测试Java程序中所需要的配置文件
---/pom.xml #maven的核心文件(maven项目必须要有)
maven启动的时候先找pom文件,知道要干什么,然后到main中找程序,到test中找测试程序
2)在Projects文件中按照上面的目录结构新建一个Hello项目
注意src目录与pom.xml文件同级,pom.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<!--上面的东西都是固定的-->
<!--下面三个称之为坐标,三个值来指定项目的名称的唯一标识-->
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成,这里先简写-->
<groupId>com.studymyself</groupId>
<!--项目名字-->
<artifactId>maven-01</artifactId>
<!--项目的版本号-->
<version>1.0-SNAPSHOT</version>
</project>
在main目录的java文件夹中创建com.studymyself包,其中创建一个HelloMaven类,代码如下
com.studymyself.HelloMaven.java
package com.myselfstudy
public class HelloMaven{
public int add(int a,int b){
return a+b;
}
public static void main(String[] args){
HelloMaven hello = new HelloMaven();
int res = hello.add(10,20);
System.out.println("10+20="+res);
}
}
在Hello项目的根目录下,即pom.xml文件所在目录下启动cmd,在dos命令窗口中执行命令:mvn compile
意思是编译main目录下的java目录下的所有java文件
出现编译错误,重新下载了maven3.3.9,将原来的覆盖,后发现还是解决不了问题,找出错误原因是maven工具所用的settings文件是系统盘.m2目录中的settings文件,为什么?如下面所示
F:\Git_Repositories\Maven\Projects\Hello>mvn compile
[ERROR] Error executing Maven.
[ERROR] 1 problem was encountered while building the effective settings
[FATAL] Non-parseable settings C:\Users\钟荣杰\.m2\settings.xml: Duplicated tag: 'mirrorOf' (position: START_TAG seen ...</url> \ua0\n <mirrorOf>... @172:15) @ C:\Users\钟荣杰\.m2\settings.xml, line 172, column 15
1.Maven的配置文件(Maven的安装目录/conf/settings.xml )
和 Maven仓库下(默认的Maven仓库的是用户目录下的.m2文件,可以另行制定)的settings.xml文件
在Maven中提供了一个settings.xml文件来定义Maven的全局环境信息。
--这个文件会存在于Maven的安装目录的conf子目录下面,或者是用户家目录的.m2子目录下面。
我们可以通过这个文件来定义本地仓库、远程仓库和联网使用的代理信息等。
其实相对于多用户的PC机而言,在Maven安装目录的conf子目录下面的settings.xml才是真正的全局的配置。
而--用户家目录的.m2子目录下面的settings.xml的配置只是针对当前用户的。
当这两个文件同时存在的时候,那么对于相同的配置信息用户家目录下面的settings.xml中
定义的会覆盖Maven安装目录下面的settings.xml中的定义。
用户家目录下的settings.xml文件一般是不存在的,但是Maven允许我们在这里定义我们自己的settings.xml,
如果需要在这里定义我们自己的settings.xml的时候就可以把Maven安装目录下面的settings.xml文件
拷贝到用户家目录的.m2目录下,然后改成自己需要的。
修改.m2目录中的settings用conf目录中的替换,再次编译
F:\Git_Repositories\Maven\Projects\Hello>mvn compile
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building maven-01 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ maven-01 ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ maven-01 ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding GBK, i.e. build is platform dependent!
[INFO] Compiling 1 source file to F:\Git_Repositories\Maven\Projects\Hello\target\classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.201 s
[INFO] Finished at: 2021-01-26T19:47:46+08:00
[INFO] Final Memory: 14M/207M
[INFO] ------------------------------------------------------------------------
--注意:
如果是第一次使用maven工具,会自动下载maven工具需要使用的插件(java类),形式都是jar文件
从中央仓库地址下载:https://repo.maven.apache.org
存储到上面所讲的.m2目录的repository目录中:
默认仓库位置(可修改):C:\Users\(登录操作系统的用户名)\.m2\repository
--因为之前用过,已经下载好了
--编译成功的结果是在项目的目录中生成target目录,编译的class文件都放在这里
直接java HelloMaven执行
--修改本机存放资源的仓库位置
通过修改settings文件,来修改仓库位置,怎么修改在配置文件中是有注释的,如下:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
可以看到上面的注释中告诉了我们默认仓库位置:${user.home}/.m2/repository
怎么修改位置:<localRepository>/path/to/local/repo</localRepository>
我们在settings文件中有上面这段注释的下方添加:
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<localRepository>E:/maven/myrepository</localRepository>
这样保存就修改成功了,要注意路径是左斜杠/
如果.m2目录中有settings.xml文件,则在该目录下修改这个配置文件,否者就修改conf目录中的settings文件
以后如果要配置什么,就直接看里面的注释,按注释中的步骤修改添加。修改前必须备份,放在原目录,等待以后备用
还有就是路径必须是非中文的,无论在什么开发中一定杜绝使用中文路径!!!
5、Maven仓库
maven仓库:
1、--定义
maven仓库就是存放maven使用的jar和项目中需要使用的jar包的目录文件夹
包括:maven依赖的插件和项目使用的jar(第三方工具)
2、--分类
本地仓库:计算机本地的文件夹,存放的jar包
远程仓库:在互联网上的,需要连接网络才能使用。如
--中央仓库:
最权威的,所有开发人员都共享使用的一个集中仓库,地址:https://repo.maven.apache.org
--由于中央仓库共享,人一旦多起来使用,其服务器压力就增大,速度就会变慢,所以有下面的
--中央仓库镜像:
中央仓库的备份,在各大洲,重要城市都是镜像,每个洲都有镜像服务器,在哪个洲开发就优先到哪个洲的镜像
maven先到镜像下载资源,下载不到的再到中央仓库找资源,找到后给镜像,然后镜像给开发人员
--私服:公司内部的,局域网中使用,不对外开放
3、--仓库的使用
不需要开发人员参与,如:
开发人员需要使用MySQL驱动
maven首先查看本地仓库->若没有就到私服下载到本地->还没有到镜像下载到私服->仍没有到中央仓库下载到镜像
6、Maven的POM文件
POM文件中的基本信息标签
Project Object Model项目对象模型,maven把一个项目的结构和内容抽象成一个这样的一个模型,
然后在xml文件中声明。所以pom.xml文件是maven的灵魂。
该文件中属性标签代表的信息如下:
<modelVersion>
前面说maven把项目抽象成一个模型,这个标签属性对应的就是模型的版本,
对于maven版本的maven2和maven3,该属性中模型版本号只能是4.0.0
<modelVersion>4.0.0</modelVersion>
<groupId>
该属性代表组织id,一般都是公司域名倒写
1、域名倒写:com.baidu
2、域名倒写+项目名:com.baidu.appolo,这是百度的一个项目
<artifactId>
该属性代表的是项目的名称,或是模块名称,对应groupId中项目中的子项目
<version>
该属性代表该项目的版本号,如果项目还是在开发中,是不稳定版本,
在版本后带-SNAPSHOP(意思是快照),版本号使用三位数标识,1.0.0
<!--
上面三个属性合在一块称之为坐标,是该项目在互联网中的唯一标识。
其中grouId,公司域名是互联网中唯一的,倒写也是唯一的,使得该项目可以在互联网中唯一。
而artifactId,是在公司内部项目中模块唯一的。
添加version版本号。就使得这个项目假如上传到互联网仓库中依据这个坐标唯一识别。
我们要使用到别人的资源,也是需要依靠第三方资源的坐标才能获取到的,这是一个项目中必须要有的。
那么如何知道其他资源(项目)的坐标呢?
访问www.mvnrepository.com:中央仓库,在其中搜索对应资源,例如我们需要mysql驱动,在其中搜索"mysql"
具体的操作下面粘贴截图
-->
<groupId>com.studymyself</groupId>
<artifactId>maven-01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging></packaging>
该属性表示项目打包的类型,可以为jar、war、rar、ear、pom。默认不写的话是jar
<dependencies>
<!--
该属性中是包含属性标签的<dependency>,表示可以有很多属性标签的<dependency>
因为项目需要很多依赖jar包
-->
<denpendency>
<!--
一个该属性标签表示的一个依赖jar包,用该属性配置依赖,需要填到信息就是坐标
就是说maven把jar也当作一个项目了,依赖资源坐标的获取下面截图所示
-->
</denpendency>
<denpendency>
<!--
不止一个依赖
-->
</denpendency>
...
</dependencies>
<dependencies>
<!--依赖,相当于Java代码中的import-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
<!--那么maven是怎么运作的呢?
假设在有jar的情况,maven到本地仓库找mysql文件夹(对应的groupId),
选择mysql-connector-java的文件夹,选择5.3.37版本文件夹,
取出其中的mysql-connector-java-5.3.37.jar,配置到项目中
-->
<denpendency>
...
</denpendency>
...
</dependencies>
<properties>
该属性是定义一些配置属性的,如project.build.sourceEncoding定义项目构建源码编码方式,设置UTF-8
<build>
该属性定义编译代码和测试代码时的信息配置,如设置编译插件的jdk版本等等
</build>
下面两个以后学
<parent></parent>
<modules></modules>
7、Maven的生命周期
Maven的生命周期就是maven构建项目的过程
--Maven把项目构建的各个过程对应成其生命周期的各个阶段,每一个阶段都提供相应的命令
--Maven独立使用开发项目用到的常用命令如下:
mvn clean:清理,删除原来编译和测试的目录,target目录。但是已经install到仓库中的包不会被清除
mvn compile:编译主程序(只编译src/main/java文件下的java文件),
在当前目录下(项目目录)生成一个target目录,里面存放编译生成的字节码文件
mvn test-compile:编译测试程序(只编译src/test/java文件下的java文件),结果和上面一样
mvn test:测试,生成一个surefire-reports目录,保存测试结果
mvn package:打包主程序,编译、编译测试、测试、按照pom文件中的配置把主程序打包生成jar文件或war包
mvn install:安装主程序,把本工程打包,按照工程的坐标存放保存到本地仓库中
mvn deploy:部署主程序
--maven插件:
maven这些命令执行时,真正完成这些功能的是插件,即一些jar包,一些类
--maven插件类型
1)单元测试:用junit,是一个专门测试的框架(工具)
测试的内容:测试类中的方法,每一个方法都是独立测试的。方法是测试的基本单位(单元)
maven就借助单元测试批量检测类中大量的方法是否符合预期
使用步骤:
1、加入junit依赖代码到pom文件中,在中央仓库搜索junit,点击使用最多的,
选择版本,其中4.11和4.12使用最多
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
2、在maven项目中的src/test/java目录下,创建测试程序
推荐的创建类和方法提示:
1)、测试类的名称是Test+要测试的类名
2)、测试的方法名称,test+方法名称
--如测试之前HelloMaven的程序:
创建测试类:TestHelloMaven
@Test
public void testAdd(){
--测试HelloMaven的add方法是否正确的代码
}
其中testAdd叫做测试方法,定义规则如下:
1)、方法必须是public修饰
2)、方法必须是没有返回值的
3)、方法名称自定义,推荐test+测试方法名(遵从驼峰式命名规则)
4)、在方法上面加上注解@Test
8、Maven的命令演示
演示Maven命令:
mvn clean:清理,删除原来编译和测试的目录,target目录。但是已经install到仓库中的包不会被清除
mvn compile:编译主程序(只编译src/main/java文件下的java文件),
在当前目录下(项目目录)生成一个target目录,里面存放编译生成的字节码文件
mvn test-compile:编译测试程序(只编译src/test/java文件下的java文件),结果和上面一样
mvn test:测试,生成一个surefire-reports目录,保存测试结果
mvn package:打包主程序,编译、编译测试、测试、按照pom文件中的配置把主程序打包生成jar文件或war包
mvn install:安装主程序,把本工程打包,按照工程的坐标存放保存到本地仓库中
mvn deploy:部署主程序
在src/test/java中添加测试代码,测试的是主程序中的HelloMaven,所以编写的测试程序所在包要与HelloMaven中的一致。创建一个com.studymyself.TestHelloMaven类,具体测试代码如下
package com.studymyself;
public class TestHelloMaven{
@test
public void testAdd(){
System.out.println("Maven == junit ==执行testAdd()");
//下面编写的是测试add方法是否正确的代码
HelloMaven hello = new HelloMaven();
int res = hello.add(10,20);
//验证10+20是不是等于30,需要使用junit提供的方法来对比结果
//junit包中的Assert中的一个方法
//Assert.assertEquals(期望值,得到的实际值),该方法中如果两个值相等证明正确,不等则抛出异常
Assert.assertEquals(30,res);
}
}
需要注意的是单单使用maven的命令构建工程,需要在有pom文件所在的目录下执行maven命令。
第一步:mvn clean
可以看到上图中maven使用清理功能插件,删除了先前编译生成的target
第二步、mvn compile(编译主程序Java文件)
从上图可以知道该命令需要用到两个插件完成功能,一个是编译生成target目录存放class文件的,另一个是将程序所需资源resources拷贝到target/classes当前目录下
第三步、mvn test-compile(编译测试程序java文件)
可以看到里面有四个插件,由于maven的生命周期在执行某个阶段时会将前面的阶段都执行一次,即前面两个插件是
mvn compile所做的那些事
第四步、mvn test(测试)
从上面我们可以知道,执行mvn test命令,maven把前面所有的构建阶段都执行了一遍。所以我们在测试程序再添加一个测试方法时,不再需要执行前面清理编译等命令了。
package com.studymyself;
import org.junit.Assert;
import org.junit.Test;
import com.studymyself.HelloMaven;
public class TestHelloMaven{
@Test
public void testAdd(){
System.out.println("测试方法1:Maven == junit ==执行testAdd()");
//下面编写的是测试add方法是否正确的代码
HelloMaven hello = new HelloMaven();
int res = hello.add(10,20);
//验证10+20是不是等于30,需要使用junit提供的方法来对比结果
//junit包中的Assert中的一个方法:
assert: 明确肯定; 断言; 坚持自己的主张; 表现坚定; 维护自己的权利(或权威);
//Assert.assertEquals(期望值,得到的实际值),该方法中如果两个值相等证明正确,不等则抛出异常
Assert.assertEquals(30,res);
}
@Test
public void testAdd2(){
System.out.println("测试方法2:Maven == junit ==执行testAdd2()");
//下面编写的是测试add方法是否正确的代码
HelloMaven hello = new HelloMaven();
int res = hello.add(10,20);
//验证10+20是不是等于30,需要使用junit提供的方法来对比结果
//junit包中的Assert中的一个方法
//Assert.assertEquals(期望值,得到的实际值),该方法中如果两个值相等证明正确,不等则抛出异常
Assert.assertEquals(50,res);
}
}
再次执行测试命令,出现有测试失败的方法,并报错抛出异常。存放结果位置是
[ERROR] Please refer to F:\Git_Repositories\Maven\Projects\Hello\target\surefire-reports for the individual test results.
第五步、mvn package(打包)
注意:当我们的测试程序中有测试方法失败时,是无法打包的,执行该命令会把之前的构建过程都执行一次,测试阶段有失败的话,这个项目肯定没有完成,所以打包会失败
打包文件只包含src/main目录下的class文件和资源文件以及其他文件
第六步、mvn install
(将jar包安装到本地仓库,其他项目需要用就可以直接添加其依赖就行了)
执行完前面的阶段,可以看到将打包好的jar包存放到了本地仓库repository的com\studymyself\maven-01\1.0-SNAPSHOT目录中。怎么存,就是由pom文件中的项目坐标确定的。
有时候我们需要在pom文件中配置编译插件,用build属性标签,如下:
以后想配置什么插件就直接到网上搜索,就能得到,直接复制粘贴不需要自己写
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>
<!--上面的东西都是固定的-->
<!--下面三个称之为坐标,三个值来指定项目的名称的唯一标识-->
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成,这里先简写-->
<groupId>com.studymyself</groupId>
<!--项目名字-->
<artifactId>maven-01</artifactId>
<!--项目的版本号-->
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--测试单元-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!--依赖作用范围-->
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!--配置插件标签-->
<plugins>
<!--具体插件配置标签-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<!--插件名称-->
<artifactId>maven-compiler-plugin</artifactId>
<!--插件版本-->
<version>3.8.1</version>
<!--配置插件的信息-->
<configuration>
<!--告诉maven,项目代码要在jdk1.8上编译-->
<source>1.8</source>
<!--告诉maven,项目代码要在jdk1.8上运行-->
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>