学习目标

  1. 能够了解Maven的作用
  2. 能够理解Maven仓库的作用
  3. 能够理解Maven的坐标概念
  4. 能够掌握Maven的安装
  5. 能够掌握IDEA配置本地Maven
  6. 能够使用IDEA创建javase的Maven工程

一、maven概述

1.1、项目开发中的问题

若没有maven的存在:

  1. 我的项目依赖一些jar包,我把他们放在哪里?直接拷贝到项目的lib文件夹中? 如果我开发的第二个项目还是需要上面的那些jar包,再把它们复制到我当前项目lib中?那如果现在是第三次了,再复制一次吗?这样真的好吗?这样子操作会引起什么样的问题?

    1. 以上操作会出现的问题:
    2. 重复存放jar包;容易出现jar包冲突;
    3. 手动拷贝jar包容易缺少一些jar包。
    4. 解决方案:用maven来管理jar
  2. 我写了一个数据库相关的通用类,并且推荐给了其他项目组,现在已经有5个项目组使用它了,今天我发现了一个bug,并修正了它,我会把jar包通过邮件发给其他项目组。这样真的好吗?那如果有新的bug出现,还要改呢?

    1. 以上操作会出现的问题:
    2. 需要开发人员每次都手动接收新的jar包并替换掉本地的jar包,麻烦。
  3. 不同IDE之间,项目结构不一样,不通用。eclipse,MyEclipse,idea 都不一样,怎么办?

以上问题需要得到解决得用用maven来管理jar包
注意:在maven中所描述的依赖就是我们平常使用的第三方的jar包。

1.2、maven是什么

1.2.1 maven定义

  1. Apache Maven 是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档
  2. ---《百度百科》
  3. maven:本质上是一个软件,用来管理项目的。

•官网:http://maven.apache.org/

1.2.2 mven的作用

  • 提供了一套标准化的项目结构
    1 maven 入门 - 图1
  • 提供了一套标准化的构建流程(编译,测试,打包,发布……)
    1 maven 入门 - 图2
  • 提供了一套依赖管理机制
    依赖管理其实就是管理你项目所依赖的第三方资源 (jar包、插件…)
    1 maven 入门 - 图3

    二、maven快速入门

    2.1 、maven的下载与安装

    下载

    官方网站:http://maven.apache.org/
    下载页面:http://maven.apache.org/download.cgi
    image.png
    注:本教程使用的是3.3.9版本的maven。

    安装

    maven安装包下载完成后是一个压缩文件,如下图所示:
    1 maven 入门 - 图5
    我们需要将压缩包解压到一个没有中文,空格或其他特殊字符的文件夹内即可使用:
    1 maven 入门 - 图6

    2.2、maven安装目录简介

    1 maven 入门 - 图7
目录名 功能说明
bin 二进制的可执行文件,如:mvn.cmd是maven的核心可执行文件
boot 第三方类加载器插件,类似于ClassLoader
conf 配置文件夹,其中的settings.xml是用于配置本地仓库的
lib maven自身运行所需要的jar包

2.3、maven配置-MAVEN_HOME

2.3.1 配置JAVA_HOME

3版本的maven软件依赖1.7或以上版本的JDK,所以安装maven之前需要确认jdk的版本和JAVA_HOME是否正确配置:
1 maven 入门 - 图8
1 maven 入门 - 图9
注意:JAVA_HOME路径需要设置成bin目录的上一级目录

2.3.2 配置MAVEN_HOME

  1. 按照上面JAVA_HOME的配置方式,将maven的安装目录配置到环境变量中。MAVEN_HOME=maven压缩包解压目录,就是bin的上一级目录。<br />第一步:新增环境变量:MAVEN_HOME<br />![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584712131-301d01d4-fd75-454d-bf19-4ee3bd3ad9b7.png#crop=0&crop=0&crop=1&crop=1&id=kvDdZ&originHeight=423&originWidth=651&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)<br />第二步:在path环境变量中添加:%MAVEN_HOME%\bin<br />![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584712218-d43a7440-732e-42bf-8956-1114cb4ff2fa.png#crop=0&crop=0&crop=1&crop=1&id=CGll1&originHeight=556&originWidth=523&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)<br />第三步:测试:在cmd控制台中输入命令: mvn -version ;如果出现以下maven的版本信息,则说明maven的安装与环境变量的配置均正确;<br />![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584712310-e77b93be-69df-4352-86cf-037c557d7568.png#crop=0&crop=0&crop=1&crop=1&id=HgRvH&originHeight=155&originWidth=686&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)<br />说明:出现如上信息说明maven安装和配置环境变量都成功。

2.4、maven仓库介绍

仓库就是一个目录(文件夹),这个目录被用来存储我们项目的所有依赖(就是jar包)和插件。
仓库包括两类仓库:

  1. 本地仓库:就是电脑中的目录(文件夹),用来存储自己电脑上所有项目所需的依赖(就是jar包),这些依赖jar包都是从远程仓库下载的.
  2. 远程仓库:互联网中的仓库,远程仓库又包括两类:
    1. 中央仓库
    2. 私服

工作方式如下图所示:
1 maven 入门 - 图10
结论:
将来jar包的查找顺序则变为:本地仓库 —> 远程仓库( 私服 —> 中央仓库)

2.4.1、maven本地仓库配置

2.4.1.1 本地仓库

本地仓库是电脑中的目录(文件夹),用来存储自己电脑上所有项目所需的依赖(就是jar包),这些依赖jar包都是从远程仓库下载的。

2.4.1.2 配置本地仓库

本地仓库的位置是通过maven的核心配置文件(settings.xml)来配置的。settings.xml文件位于maven安装目录:apache-maven-3.3.9\conf\settings.xml
1 maven 入门 - 图11
打开settings.xml文件:
1 maven 入门 - 图12
发现本地仓库默认的地址为当前用户的/.m2/repository目录。
一般情况下,我们需要自己重新设置本地仓库的地址,设置方法如下:

  1. 第一步:在maven的安装目录下创建一个repository文件夹(一般习惯将仓库地址和maven安装目录放置在一起)。

1 maven 入门 - 图13

  1. 第二步:在核心配置文件setting.xml中,将仓库存放的位置设置成:D:\MySoft\maven\apache-maven-3.3.9\repository(以自己的安装路径为准);
    1 maven 入门 - 图14

    2.4.2、远程仓库

    远程仓库又包括两类:中央仓库,私服

    2.4.2.1、中央仓库

    中央仓库默认是apache提供的,位于国外。(中央仓库的地址:http://mvnrepository.com/)
    网络不好的时候,下载速度有时慢。通常会配置私服解决这个问题。
    1 maven 入门 - 图15

    2.4.2.2、配置maven私服

    2.4.2.2.1 什么是私服

    私服是可以架设在局域网的一种特殊的远程仓库,目的是代理中央仓库来部署第三方构件。有了私服之后,当 Maven 需要下载构件时,直接请求私服,私服上存在则下载到本地仓库;否则,私服请求外部的远程仓库(中央仓库),将构件下载到私服,再提供给本地仓库下载。
    我们现在使用的私服有两个:

  2. 阿里云私服(连接外网)

  3. 传智私服(在教室里局域网)

我们到公司,公司都会有自己的私服。其实私服就是一个服务器。我们的maven项目到私服服务器上去下载jar包到本地仓库供maven项目使用。
1 maven 入门 - 图16
1 maven 入门 - 图17

2.4.2.2.2 配置私服
  1. 打开settins.xml文件,找到标签节点,在这个标签中添加以下配置信息中的任意一个:<br />**【传智局域网私服】--在教室使用**
  1. <mirror>
  2. <id>my</id>
  3. <mirrorOf>*</mirrorOf>
  4. <name>Human Readable Name for this Mirror.</name>
  5. <url>http://192.168.50.187:8081/repository/maven-public/</url>
  6. </mirror>

【阿里云私服】—连外网时使用

<mirror>
     <id>nexus-aliyun</id>
     <mirrorOf>*</mirrorOf>
     <name>Nexus aliyun</name>
     <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

1 maven 入门 - 图18
千万注意, 只可配置一个(另一个要注释!) 不然两个可能发生冲突 ,导致jar包下不下来 !!!!!!!

三、maven工程入门

在创建maven工程之前一定要保证上述的仓库都是配置成功了,否则无法创建maven项目,因为创建maven项目都要到仓库中去下载插件。那么上面我们已经配置好maven仓库了,接下来我们就要创建maven工程了。

1、IDEA配置本地maven

因为idea和maven是没有直接关系的。所以使用idea创建maven工程之前需要将本地的maven配置到idea环境中,这样才可以在idea中创建maven工程。配置方法如下:

1.1 配置本地maven

  1. 第一步:关闭当前工程,回到idea主界面找到 customize ---> All settings

1 maven 入门 - 图19

  1. 第二步:配置maven_home和settings.xml的路径:
    在搜索框里搜索maven,然后按照下面操作即可。1 maven 入门 - 图20

    1.2 配置maven参数

    使用idea创建maven项目后,默认会去网络中的中央仓库中下载一些配置资源,那么会很慢,这里需要设置下,那么就不会到中央仓库去下载了一些资源,而是到本地仓库下载。需要设置参数archetypeCatalog。
    设置方法如下:将-DarchetypeCatalog=internal 设置到Maven--Runner--VM Options中。
    1 maven 入门 - 图21

    参数:-DarchetypeCatalog=internal
    

    说明:

  2. -D:在maven中表示设置参数的意思

  3. archetypeCatalog:表示设置参数的名字
  4. internal:表示设置参数的值

    2、创建maven java工程

    使用maven创建的项目可分为3种类型:
    1)普通maven项目,就是之前的javase项目—-> java project,项目打成jar包运行
    2)maven的web项目,项目打成war包运行(我们这里不讲解,后续课程讲解)
    3)maven的pom项目,也称为maven的聚合项目(我们这里不讲解,后续课程讲解)
    本课程只涉及到普通的java项目创建,web项目后面学习到web课程会学习到。

    2.1 创建步骤

  5. 第一步:File—New—Project
    1 maven 入门 - 图22

  6. 第二步:选择maven然后下一步:
    1 maven 入门 - 图23
  7. 第三步:填写项目的坐标信息:
    1 maven 入门 - 图24
    附: ``` GroupID: 项目组织唯一的标识符。定义方式:域名.项目组名 比如我的项目组叫heima30 那么GroupID应该是 com.itheima.sh.heima30
    ArtifactID:项目的唯一的标识符,表示项目名。 一般是 xxx-xxx
    比如maven-java

version:项目版本号 第一次就是1.0.0 第二次比较多的修改 2.0.0 第三次小的修改 2.1.0 第四次修改很小的bug2.1.1 ….


1. 第四步:指定项目名称和路径:idea会把项目名中的`-` 去掉,我们给添加上即可。<br />![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584713683-74dbd9c4-caa9-43c2-ac7f-aa5d14baf2b8.png#crop=0&crop=0&crop=1&crop=1&id=aclHF&originHeight=157&originWidth=730&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584713771-cd4ed858-1c91-40da-9670-52a54ec21ffc.png#crop=0&crop=0&crop=1&crop=1&id=qKiKt&originHeight=1010&originWidth=1055&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
<a name="rIWMp"></a>
#### 2.2 java工程目录简介
![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584713864-58fbf86e-8d0b-4af8-b7ca-8ab8fc23a4df.png#crop=0&crop=0&crop=1&crop=1&id=WxsJV&originHeight=241&originWidth=861&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)<br />说明:

1. `.idea`和maven-java1.iml 只要在idea中创建工程都会存在的,idea生成的,不用关心
1. pom.xml是maven的核心配置文件,我们会在这个配置文件配置依赖。下面会讲解
1. main:主代码,在实际开发中是项目上线运行的

java:存放java代码的 resources:存放配置文件的,相当于以前创建的java工程中的src。 例如存放mybatis、数据库连接池的配置文件。这个目录只能存放配置文件。


1. test:存放测试的代码,项目上线之前先进行测试,然后在上线。<br />java:存放编写java的测试的代码,例如junit测试
<a name="C7wLX"></a>
#### 2.3 运行java代码

1. 在main目录的java目录上右键创建包<br />![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584713956-8a3d66cc-4d83-4f06-87c3-eba86e2fe349.png#crop=0&crop=0&crop=1&crop=1&id=rVsMq&originHeight=182&originWidth=732&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584714040-664739ed-a8b6-4dbc-8f7b-00e3ab76051f.png#crop=0&crop=0&crop=1&crop=1&id=OphHS&originHeight=139&originWidth=318&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

2. 在创建好的包上右键创建java类<br />![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584714122-7152f481-92ab-4e81-8271-ba66a73afac5.png#crop=0&crop=0&crop=1&crop=1&id=bg9qO&originHeight=204&originWidth=969&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584714207-603e6ac5-c611-4732-a231-df7aaf0cdd6d.png#crop=0&crop=0&crop=1&crop=1&id=SBl1R&originHeight=147&originWidth=361&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

3. 编写以下代码进行测试:
```java
package com.itheima.sh.maven_helloworld_01;
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("hello maven..");
    }
}

运行程序:点击main方法左侧的绿色小三角,点击图标1 或者图标2 运行程序:
1 maven 入门 - 图25
运行结果:如果控制台上能够正常打印如下信息,则说明工程创建没问题:
1 maven 入门 - 图26

四、maven项目构建的生命周期(了解)

1、maven项目构建的生命周期

1.1 生命周期是什么

项目的生命周期是指从开发到上线生产,过程中各种步骤。<br />    在Maven出现之前,项目构建的生命周期就已经存在,软件开发人员每天都在对项目进行清理,编译,测试及部署。虽然大家都在不停地做构建工作,但公司和公司间,项目和项目间,往往使用不同的方式做类似的工作。<br />    Maven的生命周期就是为了对所有的构建过程进行抽象和统一。Maven从大量项目和构建工具中学习和反思,然后总结了一套高度完美的,易扩展的生命周期。这个生命周期包含了项目的`清理,初始化,编译,测试,打包,集成测试,验证,部署和站点生成`等几乎所有构建步骤。<br />Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际工作,**在Maven的设计中,实际任务(如源代码编译)都交由插件来完成。**

1.2 maven的三套生命周期

maven拥有三套相互独立的生命周期,分别是clean,default和site。

  1. clean 生命周期的目的是清理项目
  2. default 生命周期的作用是构建项目
  3. site 生命周期的目的是构建项目站点

maven的生命周期都对应着具体的命令如下:

[clean生命周期]

clean生命周期的目的是清理项目,它包含三个阶段:

  1. pre-clean 执行一些清理前需要完成的工作;
  2. clean 清理上一次构建生成的文件;
  3. post-clean 执行一些清理后需要完成的工作;

    [default生命周期]

    default生命周期定义了真正构建项目需要执行的所有步骤,它是所有生命周期中最核心的部分。其中的重要阶段如下:

  4. compile :编译项目的源码,一般来说编译的是src/main/java目录下的java文件至项目输出的主classpath目录中;

  5. test :使用单元测试框架运行测试,测试代码不会被打包或部署;
  6. package :接收编译好的代码,打包成可以发布的格式,如jar和war;
  7. install: 将包安装到本地仓库,供其他maven项目使用;
  8. deploy :将最终的包复制到远程仓库,供其他开发人员或maven项目使用;

    [site生命周期]

    site生命周期的目的是建立和发布项目站点,maven能够基于pom文件所包含的项目信息,自动生成一个友好站点,方便团队交流和发布项目信息。该生命周期中最重要的阶段如下:

  9. site :生成项目站点文档;

    2、maven生命周期相关命令

    我们使用以下命令可以完成maven生命周期,演示生命周期的命令必须在pom.xml所在的目录下打开dos窗口然后输入如下命令进行演示。

  10. 找到pom.xml文件位置

1 maven 入门 - 图27
1 maven 入门 - 图28
1 maven 入门 - 图29

  1. 在pom.xml文件位置输入cmd打开dos窗口

1 maven 入门 - 图30

mvn clean:调用clean生命周期的clean阶段,清理上一次构建项目生成的文件;
mvn compile :编译src/main/java中的java代码;
mvn test :编译并运行了test中内容 ;
mvn package:将项目打包成可发布的文件,如jar或者war包; 
mvn install :发布项目到本地仓库 ;

2.1、mvn clean

clean命令的作用是清理项目编译或打包后生成的文件,具体对应maven项目中的target目录;
需求:清理存储上一次构建项目生成的文件target.
未清理前:
1 maven 入门 - 图31
1 maven 入门 - 图32
1 maven 入门 - 图33
清理之后:
1 maven 入门 - 图34
我们发现不存在target目录了。

2.2、mvn compile

compile命令的作用是编译src/main/java中的java代码编译成可直接运行的class文件。编译完成后maven项目会自动创建一个target目录来存储这些文件。<br />![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584715121-11838d8f-4070-4ecb-ab6f-52facad1e92d.png#crop=0&crop=0&crop=1&crop=1&id=F34bj&originHeight=365&originWidth=671&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)<br />![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584715203-0667ccbd-909f-4ec3-905f-abbd12c4f7a8.png#crop=0&crop=0&crop=1&crop=1&id=Govo8&originHeight=397&originWidth=600&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

2.3、mvn test

test命令的作用是编译并运行maven项目的src/test目录下的junit测试代码。注意:只能运行junit测试代码。    **并且使用test运行的测试类的类名必须以Test结尾,否则不会运行,不会看到结果。**<br />在test/java目录下创建一个测试类,书写测试方法,代码如下:
package com.itheima.sh.maven_test_01;
import org.junit.Test;
public class MavenTest {
    @Test
    public void show() {
        System.out.println("show....");
    }
}

在dos窗口输入的测试命令:

mvn test

1 maven 入门 - 图35
编译后生成的文件:
1 maven 入门 - 图36
运行日志:
1 maven 入门 - 图37
注意:
1.test命令只能运行test目录下的junit包下的类
2.test命令也可以运行多个测试方法:

package com.itheima.sh.maven_test_01;
import org.junit.Test;
public class MavenTest {
    @Test
    public void show() {
        System.out.println("show............");
    }
    @Test
    public void show1() {
        System.out.println("show1............");
    }
    @Test
    public void show2() {
        System.out.println("show2............");
    }
}

1 maven 入门 - 图38

2.4、 mvn package

package命令是将项目打包成可以发布的包。maven项目常见的打包方式有两种:<br />        1)  maven的java project会打成jar包。<br />        2)  maven的web project会打成war包。<br />打包完成后将生成的文件存放在target目录中。<br />命令使用格式:
mvn package

1 maven 入门 - 图39
1 maven 入门 - 图40
注意:每次打包前还会再次执行所有test命令
1 maven 入门 - 图41
1 maven 入门 - 图42

2.5、 mvn install

install命令是将当前的项目打包并发布到本地仓库中,供本地的其他maven项目使用。
项目发布的路径:本地仓库路径/groupId/artifactId/
1 maven 入门 - 图43
1 maven 入门 - 图44
注意:每次安装前还会再次执行所有test命令

3、maven生命周期相关插件

maven的核心包只有几兆大小,核心包中仅仅定义了抽象的生命周期。生命周期的各个阶段都是由插件完成的,它会在需要的时候下载并使用插件,例如我们在执行mvn compile命令时实际是在调用maven的compile插件来编译java源码:
1 maven 入门 - 图45
我们使用IDEA创建maven项目后,就不需要再手动输入maven的命令来构建maven的生命周期了。IDEA给每个maven构建项目生命周期各个阶段都提供了图形化界面的操作方式。具体操作如下:

3.1 打开maven视图

依次打开:View   => Tool Windows  =>  Maven Projects<br />![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584716206-1731d8d8-4ef6-474d-a2e2-e6d0b7fa3779.png#crop=0&crop=0&crop=1&crop=1&id=edmQW&originHeight=376&originWidth=878&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)<br />打开IDEA编辑区右侧:Maven Projects会弹出如下窗口,打开窗口中的Lifecycle即可看到相关命令。<br />![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584716295-39545017-08d8-43e6-a5ed-0c63ffe7d8bf.png#crop=0&crop=0&crop=1&crop=1&id=XxpAr&originHeight=340&originWidth=697&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

3.2 执行命令

双击Lifecycle下的相关命令图标即可执行对应的命令。或者点击运行按钮:<br />![](https://cdn.nlark.com/yuque/0/2022/png/22810121/1651584716381-6dcf531f-56be-4933-8b60-7514bba40189.png#crop=0&crop=0&crop=1&crop=1&id=t16Yf&originHeight=191&originWidth=298&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)

五、maven应用详解【重点】

maven是一个项目管理工具,其中依靠于一个很重要的xml文件:pom.xml。我们接下来学习下pom.xml文件的配置。

1、pom配置详解

pom(Project Object Model)指的是项目对象模型,用来描述当前的maven项目。使用pom.xml文件来实现。<br />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.heima.maven</groupId>
    <artifactId>maven-web2</artifactId>
    <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
</project>

【pom文件详解】

1. <project> :pom文件的根标签,表示当前maven项目;

2. <modelVersion>: 声明项目描述符遵循哪一个POM模型版本。模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,目前POM模型版本是4.0.0;
3. 坐标:定位项目在本地仓库中的位置,下面三个标签组成一个坐标。
    1)<groupId>:maven项目组织id标识符,一般是公司域名倒过来写<groupId>com.heima.maven</groupId>
    2)<artifactId>:项目的标识符--项目名。<artifactId>maven-web2</artifactId>
    3) <version>:项目的版本号;<version>1.0-SNAPSHOT</version>

4. <packaging>:maven项目的打包方式一般配置jar或者war;

2、依赖管理【重点】

Maven的作用:1.构建项目(maven项目在任何一个开发工具中结构都是一样的)及项目的生命周期;2.依赖管理;3.插件管理;
Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们之前说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能在其它项目中进行依赖引用。

2.1 Maven坐标

坐标的定义元素如下:

  1. groupId:定义当前项目(jar包)隶属的实际项目组。
  2. artifactId:定义当前项目(jar包)的名称;
  3. version:定义当前项目(jar包)的版本号;

通过上面三个参数我们就能够确定一个唯一版本号的jar包。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>4.1.2.RELEASE</version>
</dependency>

2.2 依赖导入

1、使用IDEA工具导入:
IDEA中给我们提供了一种搜索jar包的方式,帮助我们快速导入jar包。使用方法如下:
  1. 第一步:在pom.xml文件中书写dependencies标签,鼠标光标移入到dependencies标签中,按Alt+Insert键。会弹出一个选择框:
    1 maven 入门 - 图46
  2. 选择Dependency后会弹出一个搜索框:输入要添加的jar包的名字
    1 maven 入门 - 图47

    选择需要的jar包后按回车键即可自动添加此依赖;
    1 maven 入门 - 图48
    注意:在idea中还可以直接输入要使用的包。
    1 maven 入门 - 图49

    2、从远程仓库中获取坐标:

    如果我们导入的依赖本地仓库中没有,使用IDEA搜索就搜索不到了,我们需要从网络中查找这个依赖的坐标,然后将其添加到pom文件中。添加完成之后,maven会帮我们从私服或中央仓库中下载该依赖。
    搜索依赖坐标的方法:

    1.从私服中获取,联网的情况下可以使用阿里云私服,在教室使用局域网可以连接传智私服。

    阿里云私服地址:http://maven.aliyun.com/nexus/content/groups/public
    传智局域网私服地址:http://192.168.50.22:8081/nexus/content/groups/public/

    在中央仓库中查找:

    网址:http://mvnrepository.com/
    1 maven 入门 - 图50
    1 maven 入门 - 图51
    将以下坐标复制到pom文件中即可:
    1 maven 入门 - 图52
    pom文件中引入依赖后,会去私服或者中央仓库中下载依赖:如果项目结构的External Librarites中出现刚引入的依赖,则说明依赖引入成功。
    1 maven 入门 - 图53

    3、maven插件

    1 问题演示

    我们在运行javase项目的时候,发现控制台会显示一些1.5已过时的警告。
    1 maven 入门 - 图54
    说明:
    当我们点击compile编译的时候发现maven编译的时候使用的插件是:maven-compiler-plugin:3.1:compile (default-compile) 。该插件默认编译的jdk版本是1.5.编译生成的.class文件,让idea中的jdk1.8运行,1.8的jdk运行1.5编译的class文件,会显示已过时字样。所以这里我们需要手动配置下jdk的编译版本,使用jdk1.8.
    我们这里需要配置maven的插件。

2 maven插件介绍

我们都知道Maven本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给插件来完成。例如编译源代码是由maven-compiler-plugin完成的,但是这些插件都是maven默认的插件,如果需要配置自己的插件,则需要通过插件的坐标来引入插件。插件的坐标可以从maven官方提供的插件列表进行下载:
Maven官方有两个插件列表:

  1. 第一个列表的GroupId为org.apache.maven.plugins,这里的插件最为成熟,
    具体地址为:http://maven.apache.org/plugins/index.html
  2. 第二个列表的GroupId为org.codehaus.mojo,这里的插件没有那么核心,但也有不少十分有用,
    其地址为:http://mojo.codehaus.org/plugins.html

获取插件步骤:

  1. 访问网址,找到maven插件,然后点击编译compiler

1 maven 入门 - 图55

  1. 点击用量信息页

1 maven 入门 - 图56
3.复制插件
1 maven 入门 - 图57

4.将上述复制的内容放到build标签里面

<!--插件管理-->
    <build>
        <plugins>
            <!--编译插件:jdk1.8-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <!-- put your configurations here -->
                    <!--源码-->
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

5.清除target编译和运行
1 maven 入门 - 图58
1 maven 入门 - 图59
使用的编译插件是我们自己配置的版本。
直接运行java代码就不会出现警告信息了。jdk的编译和运行版本统一了。

3 编译插件 maven-compiler-plugin

<!--JDK编译插件-->
            <!--编译插件:jdk1.8-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <!-- put your configurations here -->
                    <!--源码-->
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

说明:插件都要放在 plugins标签里面。

4 测试插件maven-surefire-plugin

1 maven 入门 - 图60
maven的test指令运行测试代码存在中文乱码问题, 用这个插件可以解决

<!--test插件-->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.16</version>
  <configuration>
    <forkMode>once</forkMode>
    <argLine>-Dfile.encoding=UTF-8</argLine>
  </configuration>
</plugin>

六、 Maven注意事项

6.1 清理maven仓库

在上面的bat文件上右键—-》编辑 。修改文件:
1 maven 入门 - 图61
修改完毕后,双击运行即可删除maven仓库中的残留文件。
clearLastUpdate.bat

set REPOSITORY_PATH=D:\MySoft\maven\apache-maven-3.3.9\repository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
    del /s /q %%i
)
rem 搜索完毕
pause

更改自己的仓库位置

6.2 更新依赖索引

有时候给idea配置完maven仓库信息后,在idea中依然搜索不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到idea中。这个时候我们就需要更新idea中maven的索引了,具体做法如下:
打开设置— 搜索maven — Repositories — 选中本地仓库 — 点击Update
1 maven 入门 - 图62

6.3 设置maven在不联网的情况下使用本地插件

一般使用maven为我们提供好的骨架时,是需要联网的,配置这个,可以在没有网路的情况下,我们可以正常创建工程,并从之前已经使用过的工程中找到相应的骨架。
输入内容:-DarchetypeCatalog=internal
1 maven 入门 - 图63

附一:完整的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.itheima.sh.heima33</groupId>
    <artifactId>maven-usermanager</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>
    <!--
        依赖管理:
            1、导入依赖:
                idea导入
                私服搜索坐标
            2、依赖范围设置
            3、依赖版本统一维护
       插件管理:
            1、编译插件
    -->
    <!--依赖版本统一管理-->
    <properties>
        <junit.version>4.13</junit.version>
        <servlet.version>3.0.1</servlet.version>
        <jsp.version>2.3.3</jsp.version>
        <beanutils.version>1.8.3</beanutils.version>
        <commons.logging.version>1.1.1</commons.logging.version>
        <jstl.version>1.2</jstl.version>
        <log4j.version>1.2.17</log4j.version>
        <mabatis.version>3.5.0</mabatis.version>
        <mysql.version>5.1.18</mysql.version>
    </properties>
    <!--依赖管理:-->
    <dependencies>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <!--<version>4.13</version>-->
            <version>${junit.version}</version>
            <!--范围:测试存在-->
            <!--<scope>test</scope>-->
        </dependency>
        <!--servlet-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
            <!--编译 测试需要,运行时不需要-->
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>${jsp.version}</version>
            <scope>provided</scope>
        </dependency>
        <!--commons-beanutils-->
        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>${beanutils.version}</version>
        </dependency>
        <!--commons-logging-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>${commons.logging.version}</version>
        </dependency>
        <!--jstl-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mabatis.version}</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
            <!--编译不需要。测试和运行需要-->
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
    </dependencies>
    <!--插件管理-->
    <build>
        <plugins>
            <!--JDK编译插件-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <!-- put your configurations here -->
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>80</port>
                    <path>/</path>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

附二:JDK插件

<!--配置maven的插件-->
<build>
    <plugins>
        <!--配置的是jdk编译器-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <!-- put your configurations here -->
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
    </plugins>
</build>

附三:配置idea模板


1 maven 入门 - 图64


1 maven 入门 - 图65


1 maven 入门 - 图66


1 maven 入门 - 图67


1 maven 入门 - 图68
1 maven 入门 - 图69


1 maven 入门 - 图70

小结

第一章、Maven概述
    1、maven是什么:软件-项目管理工具;
     2、maven的作用:
        【1】构建标准的项目:java,web
        【2】管理项目的生命周期:
        【3】maven管理项目中的jar包(依赖);
        【4】maven管理插件;
    3、maven的下载安装与配置:
        【1】JAVA_HOME配置正确;
        【2】MAVEN_HOME配置正确;   mvn -v
第二章、maven仓库
    【1】作用:存放jar包和插件;
    【2】分类:
            本地仓库:本地的一个文件夹
             远程仓库:远程服务器上的一个文件夹
                中央仓库:apache维护的仓库
                私服:自己搭建的远程仓库
     【3】仓库配置:
            本地仓库配置:
             私服配置:阿里云(外网),传智私服(局域网)

第三章、Maven项目创建-------重点
    【1】把maven绑定到IDEA中:
            file->other settings-->default setting 设置maven环境:maven_home,settings.xml
    【2】使用IDEA创建maven项目:掌握
            创建maven的java项目:普通项目  打包方式为jar
                    项目结构
            创建maven的web项目: 打包方式为war
                      项目结构
    【3】maven项目的生命周期:
            1、clean:删除项目构建过程中生成的文件(target)
            2、default:
                创建==》编译==》测试==》打包===》安装==》部署上线
            3、site:了解
     【4】生命周期相关命令:命令调用maven的插件执行任务
            mvn clean:清理
            mvn compile:编译
            mvn  test:测试
            mvn package:打包
            mvn install:安装

第四章、maven应用详解 ---------重点
        【1】依赖管理:
            1、坐标:定位一个jar包在本地仓库中的位置
                    <dependency>
                        <groupId>jstl</groupId>
                        <artifactId>jstl</artifactId>
                        <version>1.2</version>
                    </dependency>
            2、导入依赖:导入坐标
                本地仓库导入: Alt+Insert
                远程仓库搜索:中央仓库,私服搜索
         【2】依赖配置:
             1、依赖作用范围配置:maven有3套运行环境
                    编译环境    测试环境    运行环境(tomcat)
             test      -           是          -                   junit.jar
             compile   是        是            是                  90%的jar-默认的
               runtime   -          是            是                  mysql驱动(实现JDBC结构)
             provided  是         是            -                    servlet,jsp
             system   是          是            -
          2、依赖版本统一维护:
                定义版本信息:
                 <properties>
                      <junit.version>4.12</junit.version>
                  </properties>
                引用版本信息:
                 <version>${junit.version}</version>
        【3】插件管理:
                maven本身是一个插件库:默认的插件(版本低)
                自己配置插件,覆盖默认的插件: 编译插件,测试插件,tomcat7插件