视频:https://yunpan.cn/cSNGcUv8iqYPq 访问密码 7344
1.MAVEN 概述
Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。Maven 能够帮助开发者完成以下工作:
构建
文档生成
报告
依赖
SCMs
发布
分发
邮件列表
Maven 简化了工程的构建过程,并对其标准化。Maven 提高了重用性,负责了大部分构建相关的任务。
2.Maven 的目标
Maven 的主要目的是为开发者提供一个可复用、可维护、更易理解的工程综合模型与这个模型交互的插件或者工具
Maven 工程结构和内容被定义在一个 xml 文件中 - pom.xml,是 Project Object Model (POM) 的简称,此文件是整个 Maven 系统的基础组件。
约定优于配置
.Maven 使用约定而不是配置,意味着开发者不需要再自己创建构建过程。
.当创建 Maven 工程时,Maven 会创建默认的工程结构。开发者只需要合理的放置文件,而在 pom.xml 中不再需要定义任何配置。
.为了构建工程,Maven 为开发者提供了选项来配置生命周期目标和工程依赖(依赖于 Maven 的插件扩展功能和默认的约定)。
.大部分的工程管理和构建相关的任务是由 Maven 插件完成的。
.开发人员不需要了解每个插件是如何工作的,就能够构建任何给定的 Maven 工程。
3.maven环境配置
1.下载安装文件
2.配置环境变量
.JAVA_HOME
.MAVEN_HOME
.PATH
3.验证安装
.mvn -version
5.POM
①POM 代表工程对象模型。它是使用 Maven 工作时的基本组建,是一个 xml 文件。
②它被放在工程根目录下,文件命名为 pom.xml。
.POM 包含了关于工程和各种配置细节的信息,Maven 使用这些信息构建工程。
.POM 也包含了目标和插件。
.每个工程应该只有一个 POM 文件。
.所有的 POM 文件需要 project 元素和三个必须的字段:groupId, artifactId,version。在仓库中的工程标识为 groupId:artifactId:version
.在 artifact 的仓库中,使用groupId, artifactId,version来区分不同的版本。例如:
com.company.bank:consumer-banking:1.0
com.company.bank:consumer-banking:1.1.
③Super POM
所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。父 POM 也被称作 Super POM,它包含了一些可以被继承的默认设置。
6.构建生命周期
①什么是构建生命周期
构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序。这里的阶段是生命周期的一部分。
一个典型的 Maven 构建生命周期是由以下几个阶段的序列组成的:
阶段 处理 描述
prepare-resources 资源拷贝 本阶段可以自定义需要拷贝的资源
compile 编译 本阶段完成源代码编译
package 打包 本阶段根据 pom.xml 中描述的打包配置创建 JAR / WAR 包
install 安装 本阶段在本地 / 远程仓库中安装工程包
当需要在某个特定阶段之前或之后执行目标时,可以使用 pre 和 post 来定义这个目标。
当 Maven 开始构建工程,会按照所定义的阶段序列的顺序执行每个阶段注册的目标。
Maven 有以下三个标准的生命周期:
clean
default(or build)
site
②Clean 生命周期
包含:
pre-clean
clean
post-clean
当我们执行 mvn post-clean 命令时,Maven 调用 clean 生命周期。
clean:clean 目标通过删除构建目录,删除了构建输出。所以当 mvn clean 命令执行时,Maven 删除了构建目录。
②Default (or Build) 生命周期
这是 Maven 的主要生命周期,被用于构建应用。包括 23 个阶段。
validate 检查工程配置是否正确,完成构建过程的所有必要信息是否能够获取到。
initialize 初始化构建状态,例如设置属性。
generate-sources 生成编译阶段需要包含的任何源码文件。
process-sources 处理源代码,例如,过滤任何值(filter any value)。
generate-resources 生成工程包中需要包含的资源文件。
process-resources 拷贝和处理资源文件到目的目录中,为打包阶段做准备。
compile 编译工程源码。
process-classes 处理编译生成的文件,例如 Java Class 字节码的加强和优化。
generate-test-sources 生成编译阶段需要包含的任何测试源代码。
process-test-sources 处理测试源代码,例如,过滤任何值(filter any values)。
test-compile 编译测试源代码到测试目的目录。
process-test-classes 处理测试代码文件编译后生成的文件。
test 使用适当的单元测试框架(例如JUnit)运行测试。
prepare-package 在真正打包之前,为准备打包执行任何必要的操作。
package 获取编译后的代码,并按照可发布的格式进行打包,例如 JAR、WAR 或者 EAR 文件。
pre-integration-test 在集成测试执行之前,执行所需的操作。例如,设置所需的环境变量。
integration-test 处理和部署必须的工程包到集成测试能够运行的环境中。
post-integration-test 在集成测试被执行后执行必要的操作。例如,清理环境。
verify 运行检查操作来验证工程包是有效的,并满足质量要求。
install 安装工程包到本地仓库中,该仓库可以作为本地其他工程的依赖。
deploy 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程。
不同的 maven 目标将根据打包的类型(JAR / WAR / EAR),被绑定到不同的 Maven 生命周期阶段
③Site 生命周期
Maven Site 插件一般用来创建新的报告文档、部署站点等。
7.maven仓库
什么是 Maven 仓库?
在 Maven 的术语中,仓库是一个位置(place),例如目录,可以存储所有的工程 jar 文件、library jar 文件、插件或任何其他的工程指定的文件。
Maven 仓库有三种类型:
本地(local)
中央(central) http://mvnrepository.com/
远程(remote)
①本地仓库
Maven 本地仓库是机器上的一个文件夹。它在你第一次运行任何 maven 命令的时候创建。
Maven 本地仓库保存你的工程的所有依赖(library jar、plugin jar 等)。当你运行一次 Maven 构建,Maven 会自动下载所有依赖的 jar 文件到本地仓库中。它避免了每次构建时都引用存放在远程机器上的依赖文件。
可通过setting.xml 中localRepository 配置本地仓库的位置
②中央仓库
Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。
中央仓库的关键概念:
这个仓库由 Maven 社区管理。
不需要配置。
需要通过网络才能访问。
要浏览中央仓库的内容,maven 社区提供了一个 URL:http://search.maven.org/#browse 使用这个仓库,开发人员可以搜索所有可以获取的代码库。
③远程仓库
如果 Maven 在中央仓库中也找不到依赖的库文件,它会停止构建过程并输出错误信息到控制台。为避免这种情况,Maven 提供了远程仓库的概念,它是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。
Maven 依赖搜索顺序
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:
步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中已被将来引用。
步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库已被将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)
8.maven 插件
什么是 Maven 插件?
Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来:
创建 jar 文件
创建 war 文件
编译代码文件
代码单元测试
创建工程文档
创建工程报告
插件通常提供了一个目标的集合,并且可以使用下面的语法执行:
mvn [plugin-name]:[goal-name]
例如,一个 Java 工程可以使用 maven-compiler-plugin 的 compile-goal 编译,使用以下命令:
mvn compiler:compile
插件类型
Maven 提供了下面两种类型的插件:
类型 描述
Build plugins 在构建时执行,并在 pom.xml 的 元素中配置。
Reporting plugins 在网站生成过程中执行,并在 pom.xml 的 元素中配置。
下面是一些常用插件的列表:
插件 描述
clean 构建之后清理目标文件。删除目标目录。
compiler 编译 Java 源文件。
surefile 运行 JUnit 单元测试。创建测试报告。
jar 从当前工程中构建 JAR 文件。
war 从当前工程中构建 WAR 文件。
javadoc 为工程生成 Javadoc。
antrun 从构建过程的任意一个阶段中运行一个 ant 任务的集合。
9.maven创建工程
①.Maven 标准目录结构(见图)
②.编写HelloWorld程序
package com.cxsw.helloworld;
public class HelloWorld{
public String sayHello(){
return "Hello World!!";
}
public static void main(String[] args){
System.out.println(new HelloWorld().sayHello());
}
}
③编写测试类
package com.cxsw.helloworld;
import org.junit.Test;
public class HelloWorldTest
{
@Test
public void testHelloWorld(){
HelloWorld helloWorld=new HelloWorld();
String result=helloWorld.sayHello();
System.out.println(result);
}
}
④添加项目依赖
位置:pom.xml --> dependencies元素下
<!--依赖项目-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
⑤mvn complie 编译
⑥mvn test 测试
⑦mvn package 打包
⑧mvn install 提交到本地仓库