Maven

一、课程体系

Maven授课笔记 - 图1

二、本阶段课程说明

Maven授课笔记 - 图2

三、Why Maven

1、从『依赖管理』角度解释

Maven授课笔记 - 图3

2、从『项目管理』角度解释

可以将一个项目分成多个模块,各个模块可以部署到不同的服务器上。如何实现各个模块直接的管理、调用,如何实现分布式部署。Maven可以搞定。
Maven授课笔记 - 图4Maven授课笔记 - 图5

3、从『项目目录结构』角度解释

约定大于配置,配置大于编码

Maven的项目结构是统一的。统一有利于自动化的构建
Maven授课笔记 - 图6

四、What Maven

Maven是一款自动化构建(build)工具,专注服务于Java平台的项目构建和依赖管理。将项目开发和管理过程抽象成一个项目对象模型(POM)。开发人员只需做一些简单的配置,就可以批量完成项目的构建、报告和文档的生成工作。

Maven 是跨平台的,这意味着无论是在 Windows 上,还是在 Linux 或者 Mac 上,都可以使用同样的命令。
Maven授课笔记 - 图7

构建过程包含的主要的环节:

①清理:删除以前的编译结果,为重新编译做好准备。

②编译:将Java源程序编译为字节码文件。

③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。

④报告:在每一次测试后以标准的格式记录和展示测试结果。

⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar包,Web工程对应war包。

⑥安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。

⑦部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。

五、核心概念

Maven之所以能够实现自动化的构建,和它的设计是紧密相关的。我们对Maven的学习围绕它的九个核心概念展开。
① 仓库管理
② POM
③ 约定的目录结构
④ 坐标
⑤ 依赖管理
⑥ 生命周期
⑦ 插件和目标
⑧ 继承
⑨ 聚合

通过六个案例来完成对这九个核心概念的讲解

① 手动创建Java项目
② IDEA中创建Java项目
③ 创建Web项目
④ 依赖管理
⑤ 继承
⑥ 聚合

六、Maven的仓库

仓库的英文单词是repository: [rɪˈpɒzɪt(ə)ri]。

1、仓库中放什么

放构件(artifact)
[1]第三方框架或工具的jar包
[2]Maven的插件plugin
[3]我们自己开发的项目的模块

2、仓库分类

Maven授课笔记 - 图8

3、仓库的访问步骤

本地仓库———私服——-中央仓库(官方中央仓库、镜像仓库)
Maven授课笔记 - 图9

七、安装Maven

1、检查JAVA_HOME配置是否正确

要安装Maven,必须先正确安装JDK

C:\Users\Administrator>java -version
java version “1.8.0_161”
Java(TM) SE Runtime Environment (build 1.8.0_161-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

C:\Users\Administrator>echo %JAVA_HOME%
C:\Java\jdk1.8.0_161

C:\Users\Administrator>echo %PATH%
C:\Java\jdk1.8.0_161\bin;C:\Program Files\MySQL\MySQL Server 5.7\bin;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps;

2、下载Maven安装包

官方下载地址 :https://maven.apache.org/download.cgi

Maven授课笔记 - 图10
历史版本

Maven授课笔记 - 图11

3、解压安装

注意:安装路径不要有中文、空格等特殊字符
Maven授课笔记 - 图12
bin:mvn(maven) mvn的执行文件
conf:settings.xml Maven的配置文件

4、配置环境变量

Java:JAVA_HOME PATH
Tomcat:CATALINA_HOME PATH
Maven : M2_HOME(低版本MAVEN_HOME) Maven主目录 PATH 可执行文件的路径bin

Maven授课笔记 - 图13

Maven授课笔记 - 图14

5、验证安装是否正确

C:\Users\Administrator>mvn -v
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: C:\Java\apache-maven-3.6.3\bin\..
Java version: 1.8.0_161, vendor: Oracle Corporation, runtime: C:\Java\jdk1.8.0_161\jre
Default locale: zh_CN, platform encoding: GBK
OS name: “windows 10”, version: “10.0”, arch: “amd64”, family: “windows”

C:\Users\Administrator>mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: C:\Java\apache-maven-3.6.3\bin\..
Java version: 1.8.0_161, vendor: Oracle Corporation, runtime: C:\Java\jdk1.8.0_161\jre
Default locale: zh_CN, platform encoding: GBK
OS name: “windows 10”, version: “10.0”, arch: “amd64”, family: “windows”

注意:设置了环境变量,要重新启动cmd

6、指定本地仓库(可选)

本地仓库必须有,但是有默认位置:用户家目录/.m2/repository。
conf/settings.xml可以指定额外的位置

D:/repository

7、配置阿里云提供的镜像仓库(可选)

默认访问的远程库是官方中央仓库,但是速度慢。为了提高速度,可以指定镜像仓库


nexus-aliyun
central
Nexus aliyun
http://maven.aliyun.com/nexus/content/groups/public



8、配置Maven工程的基础JDK版本(可选)

该配置对当前服务器的所有的Maven工程有效,这是一个全局配置。
此处不配置,默认JDK编译版本是JDK5,但是可以在每个工程进行单独配置,局部的配置


jdk-1.8

true
1.8


1.8
1.8
1.8
UTF-8

八、Maven的目录结构

Maven授课笔记 - 图150
² src/main/java:存放项目的java类源文件,即:Xxx.java
² src/main/resources:存放项目的资源文件,如.xml、.properties
² src/test/java:存放项目的用于测试的java类源文件,即:XxxTest.java
² src/test/resources:存放项目的测试相关的资源文件,如.xml、.properties
² pom.xml:Maven项目的配置文件,是学习Maven的重点
² target:编译之后的结果,比如class、资源文件

九、手动创建Java项目

1、创建约定目录结构

Maven授课笔记 - 图16

2、创建Maven的核心配置文件pom.xml

<?xml version=”1.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”>
4.0.0
com.atguigu.maven
HelloMaven
0.0.1-SNAPSHOT



junit
junit
4.9
test


3、编写主代码

注意:在src/java下创建目录结构 com/atguigu/maven

package com.atguigu.maven;
public class HelloMaven {
public String sayHello(String name){
return “Hello “+name+”!”;
}
}

4、编写测试代码

要在test的java下创建包结构:com/atguigu/test,和前面的HelloMaven不在一个包下

package com.atguigu.test;
import org.junit.Test;
import com.atguigu.maven.HelloMaven;
public class TestHelloMaven {
@Test
public void testHello(){
HelloMaven hello = new HelloMaven();
String results = hello.sayHello(“lucky”);
System.out.println(results);
}
}


5.使用Maven命令构建项目


打开cmd,进入当前项目的根目录(也就是pom.xml所在的目录)

命令 作用
mvn compile 只编译主代码,放入target目录
mvn clean 删除target目录
mvn test-compile 编译主代码和测试代码,放入target目录(resouces也会拷入target目录)
mvn test 编译主代码和测试代码,放入target目录(resouces也会拷入target目录),并且运行测试用例
mvn package 编译主代码和测试代码,放入target目录(resouces也会拷入target目录),并且运行测试用例,将当前项目打包成一个jar
mvn install 完成mvn package的所有功能,并且将当前jar上传到本地库(其他项目也可以使用)
mvn deploy 在install基础上,将当前的jar上传到远程库(需要更多的条件)


Compile、test-compile、test、package、install、deploy各个操作是Maven生命周期的各个阶段,当执行后面一个阶段 时候,都会从第一个阶段开始,依次执行各个阶段。

Clean属于另外一个单独的生命周期。但是可以 mvn clean install

十、Idea中创建Java项目

1、在IDEA中集成Maven

Maven授课笔记 - 图17

Maven授课笔记 - 图18

2、在IDEA中创建Maven Java工程

先创建一个Java项目,在其中可以创建多个模块,使用Maven项目结构。

Maven授课笔记 - 图19

3、进行简单代码开发

① pom.xml中添加JUnit、lombok依赖

② 创建类User并使用lombok注解

③ 创建XML资源文件

④ 创建测试类TestUser

⑤ 测试

如何希望在进行package、install等操作时跳过test,不运行测试用例,点击该按钮。
Maven授课笔记 - 图20

4、Lombok

以前的Java项目中,充斥着太多不友好的代码:POJO的getter/setter/toString;异常处理;I/O流的关闭操作等等,这些样板代码既没有技术含量,又影响着代码的美观,Lombok应运而生。
Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。
最近IDEA 2020最后一个版本发布了,已经内置了Lombok插件,SpringBoot 2.1.x之后的版本也在Starter中内置了Lombok依赖。

十一、POM

POM( Project Object Model,项目对象模型) 是Maven项目的基本工作单元,是一个XML文件,位于项目根目录,包含了项目基本信息,用于描述项目如何构建,声明项目依赖等。

Maven工程的核心配置。可以说学习Maven就是学习pom.xml文件中的配置。POM 中可以指定以下配置:

² POM模型版本:modelVersion
² 项目坐标:groupId、artifactId、version、packaging
² 父模块和子模块:parent和modules
² 项目依赖:dependencies
² 项目构建:build
² 属性和属性文件:properties和profiles

十二、坐标


Maven的坐标元素包括groupId、artifactId、version、packaging、classfier等,
其中groupId、artifactId、version是必须定义的,即可唯一的标记一个坐标,称为坐标三要素,简称GAV。
[1]groupId:公司或组织的域名倒序+当前项目名称
[2]artifactId:当前项目的模块名称
[3]version:当前模块的版本

Maven授课笔记 - 图21com.atguigu.maven
Hello0.0.1-SNAPSHOT


坐标和仓库中jar包的存储路径之间的对应关系
1]将gav三个向量连起来
Maven授课笔记 - 图22com.atguigu.maven+Hello+0.0.1-SNAPSHOT
[2]以连起来的字符串作为目录结构到仓库中查找。jar的名称是artifactId-version.jar
Maven授课笔记 - 图23com/atguigu/maven/Hello/0.0.1-SNAPSHOT/Hello-0.0.1-SNAPSHOT.jar

十三、创建Web项目1

十四、创建Web项目2

十五、创建Web项目3