Maven 第2章 Maven 是什么?
第2章 Maven 是什么? 
如果上面的描述能够使你认识到使用Maven是多么的重要,我们下面就来介绍一下Maven是什么。
2.1 自动化构建工具
1) Maven这个单词的本意是:专家,内行。读音是['meɪv(ə)n]或['mevn],不要读作“妈文”。
2) Maven是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理。在JavaEE开发的历
史上构建工具的发展也经历了一系列的演化和变迁:
Make→Ant→Maven→Gradle→其他……
2.2 构建的概念
1) 构建并不是创建,创建一个工程并不等于构建一个项目。要了解构建的含义我们应该由浅入深的从以下三个层面来看:
①纯Java代码
大家都知道,我们Java是一门编译型语言,.java扩展名的源文件需要编译成.class扩展名的字节码文件才能够执行。所以编写任何Java代码想要执行的话就必须经过编译得到对应的.class文件。
②Web工程
当我们需要通过浏览器访问Java程序时就必须将包含Java程序的Web工程编译的结果“拿”到服务器上的指定目录下,并启动服务器才行。这个“拿”的过程我们叫部署。
我们可以将未编译的Web工程比喻为一只生的鸡,编译好的Web工程是一只煮熟的鸡,编译部署的过程就是将鸡炖熟。
Web工程和其编译结果的目录结构对比见下图:
③实际项目
在实际项目中整合第三方框架,Web工程中除了Java程序和JSP页面、图片等静态资源之外,还包括第三方框架的jar包以及各种各样的配置文件。所有这些资源都必须按照正确的目录结构部署到服务器上,项目才可以运行。
所以综上所述:构建就是以我们编写的Java代码、框架配置文件、国际化等其他资源文件、JSP页面和图片等静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。
那么项目构建的全过程中都包含哪些环节呢?
2.3 构建环节
1) 清理:删除以前的编译结果,为重新编译做好准备。
2) 编译:将Java源程序编译为字节码文件。
3) 测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
4) 报告:在每一次测试后以标准的格式记录和展示测试结果。
5) 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar包,Web工程对应war包。
6) 安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
7) 部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。
2.4 自动化构建
其实上述环节我们在Eclipse中都可以找到对应的操作,只是不太标准。那么既然IDE已经可以进行构建了我们为什么还要使用Maven这样的构建工具呢?我们来看一个小故事:
让我们来梳理一下托马斯这一天中的工作内容
从中我们发现,托马斯的很大一部分时间花在了“编译、打包、部署、测试”这些程式化的工作上面,而真正需要由“人”的智慧实现的分析问题和编码却只占了很少一部分。
能否将这些程式化的工作交给机器自动完成呢?——当然可以!这就是自动化构建。
那么Maven又是如何实现自动化构建的呢?简单的说来就是它可以自动的从构建过程的起点一直执行到终点:
2.5 Maven核心概念
Maven之所以能够实现自动化的构建,和它的设计是紧密相关的。我们对Maven的学习就围绕它的九个核心概念展开:
- POM
- 约定的目录结构
- 坐标
- 依赖管理
- 仓库管理
- 生命周期
- 插件和目标
- 继承
- 聚合