第1章Maven介绍
1.1什么是Maven?
1.1.1什么是Maven
Maven是一个项目管理工具,它包含了一个项目对象模型(POM),一组标准集合,一个项目生命周期(Project lifecycle),一个依赖管理系统,和用来运行定义在生命周期阶段中插件目标的的逻辑。
1.1.1Maven能解决什么问题?
构建工程,管理jar包,编译代码,自动运行单元测试,打包,生成报表,部署项目,生成Web站点。
1.2 Maven的两个精典作用
1.2.1 Maven的依赖管理
maven工程中不直接将jar包导入到工程中,而是通过在pom.xml文件中添加所需jar包的坐标,需要用到jar包的时候根据这些坐标,在专门用于存放jar包的仓库中中找到这些jar包,再把这些jar包拿去运行
1.2.2项目的一键构建
什么是构建?
指的是项目从校验-初始化-编译-测试-打包-集成测试-安装-部署整个过程都交给maven进行管理,这个过程称为构建。(从源码到成品的整个过程。)
一键构建
指的是整个构建过程,使用maven一个命令可以轻松完成整个工作。
2.1 Maven的使用
2.1.1 Maven软件的安装
- 下载
- 解压
解压后的软件目录如下:
bin:存放了 maven 的命令,比如我们前面用到的 mvn tomcat:run
boot:存放了一些 maven 本身的引导程序,如类加载器等
conf:存放了 maven 的一些配置文件,如 setting.xml 文件
lib:存放了 maven 本身运行所需的一些 jar 包
至此我们的 maven 软件就可以使用了,前提是你的电脑上之前已经安装并配置好了 JDK。 - 配置环境变量
- 测试通过mvn -v命令测试
- 修改配置
2.2 Maven的仓库
2.2.2 仓库的分类
-
本地仓库:用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找。可以再,conf/settings.xml中修改本地仓库的位置
-
远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载。远程仓库可以再互联网内也可以再局域网内。
-
中央仓库:在 maven 软件中内置一个远程仓库地址 ,服务于整个互联网
Maven 依赖搜索顺序
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:
步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中以备将来引用。
步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库以备将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。
Maven 阿里云(Aliyun)仓库
步骤1 第一步:修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:
<mirrors>
...
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
# 2.3 Maven的目录结构
Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样的目录结构。如下所示:
2.3.1 Maven 工程的目录结构
作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的。
进入 src 目录后,我们发现它里面的目录结构如下:
目录 | 目的 |
---|---|
src/main/java | 存放项目的java源代码 |
src/main/resources | 存放项目资源文件,如 spring, hibernate 配置文件 |
src/test/java | 存放所有单元测试.java 文件,如 JUnit 测试类 |
src/test/resources | 测试资源文件 |
src/main/webapp/WEB-INF | web应用文件目录,web项目的信息,比如存放web.xml、本地图片、jsp视图页面 |
target | 打包输出目录 |
target/classes | 编译输出目录 |
target/test-classes | 测试编译输出目录 |
注意:如果是普通的 java 项目,那么就没有 webapp 目录。
2.4 Maven的生命周期
阶段 | 处理 | 描述 |
---|---|---|
验证 validate | 验证项目 | 验证项目是否正确且所有信息是可用的 |
初始化 initialize | 执行编译 | 源代码编译在此阶段完成 |
编译compile | 执行编译 | 源代码编译在此阶段完成 |
测试 | Test 测试 | 使用适当的单元测试框架(例如JUnit)运行测试 |
package 打包 | 打包 | 创建JAR/WAR包如在pom.xml中定义提及的包 |
集成测试 integrationTest | 集成测试 | 处理和部署项目到可以运行集成测试环境中。 |
安装 install | 安装 | 安装打包的项目到本地仓库,以供其他项目使用 |
部署 deplop | 部署 | 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程 |
为了完成 default 生命周期,这些阶段(包括其他未在上面罗列的生命周期阶段)将被按顺序地执行。
说明:当一个阶段通过 Maven 命令调用时,例如 mvn compile,只有该阶段之前以及包括该阶段在内的所有阶段会被执行。
不同的 maven 目标将根据打包的类型(JAR / WAR / EAR),被绑定到不同的 Maven 生命周期阶段。
Maven 有以下三个标准的生命周期:
1.清理生命周期 :在进行真正的构建之前进行一些清理工作。
2.默认生命周期 :构建的核心部分,编译,测试,打包,部署等等。
3.站点生命周期 :生成项目报告,站点,发布站点
2.5 Maven的坐标
定位
groupId 公司的域名反写 com.woniuxy.cq
artifactId 项目名 rocket
version 版本 SNAPSHOT(快照版本) rc RELEASE GA milestone
<groupId>com.woniuxy.build</groupId>
<artifactId>demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
2.6 Maven的依赖管理
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。
2.7 Maven的常用命令
- compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target目录下。
cmd 进入命令状态,执行 mvn compile,如下图提示成功:
查看 target 目录,class 文件已生成,编译完成。
- test 是 maven 工程的测试命令 mvn test,会执行 src/test/java 下的单元测试类。
cmd 执行 mvn test 执行 src/test/java 下单元测试类,下图为测试结果,运行 1 个测试用例,全部成功。
- clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容。
- package 是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war包。
- install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包发布到本地仓库。
从运行结果中,可以看出:
当后面的命令执行时,前面的操作过程也都会自动执行
3.1总结
3.1.1 maven 仓库
1、maven仓库的类型有哪些?
2、maven 工程查找仓库的流程是什么?
3、本地仓库如何配置?
3.1.2 常用的 maven 命令
常用 的 maven 命令包括:
compile:编译
clean:清理
test:测试
package:打包
install:安装
3.1.3 坐标定义
在 pom.xml 中定义坐标,内容包括:groupId、artifactId、version,详细内容如下:
cn.itcast.maven
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
传智播客——专注于 Java、.Net 和 Php、网页平面设计工程师的培训
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
maven-first
0.0.1-SNAPSHOT
:打包类型
jar:执行 package 会打成 jar 包
war:执行 package 会打成 war 包
pom :用于 maven 工程的继承,通常父工程设置为 pom
3.1.4 pom基本配置
pom.xml 是 Maven 项目的核心配置文件,位于每个工程的根目录,基本配置如下:
:文件的根节点 .
: pom.xml 使用的对象模型版本
:项目名称,一般写项目的域名
:模块名称,子项目名或模块名称
:产品的版本号 .
:打包类型,一般有 jar、war、pom 等
:项目的显示名,常用于 Maven 生成的文档。
:项目描述,常用于 Maven 生成的文档
:项目依赖构件配置,配置项目依赖构件的坐标
:项目构建配置,配置编译、运行插件等