第二节 什么是Maven?
1、项目构建
① 构建
② 构建的主要环节
③ 理解自动化构建
2、依赖管理

第二节 什么是Maven?

Maven 是 Apache 开源组织奉献的一个开源项目。Maven 这个词可以翻译为“知识的积累”,也可以翻译为“专家”或“内行”。发音:[ˈmeɪvn]。不要读作“妈文”。
02.什么是Maven - 图1

Maven是一款自动化构建(build)工具,专注服务于Java平台的项目构建和依赖管理。将项目开发和管理过程抽象成一个项目对象模型(POM)。开发人员只需做一些简单的配置,就可以批量完成项目的构建、报告和文档的生成工作。
Maven 是跨平台的,这意味着无论是在 Windows 上,还是在 Linux 或者 Mac 上,都可以使用同样的命令。
在JavaEE开发的历史上构建工具的发展也经历了一系列的演化和变迁:
Make→Ant→Maven→Gradle→其他……
Maven仍然是目前最流行的Java领域自动化构建工具,是大型项目开发中不可或缺的重要工具。尤其是Gradle是否后来居上有待观察。

1、项目构建

① 构建

Java项目开发过程中,构建指的是使用『原材料生产产品』的过程。

  • 原材料

    • Java源代码
    • 基于HTML的Thymeleaf文件
    • 图片
    • 配置文件
      ……
  • 产品

    • 一个可以在服务器上运行的项目

② 构建的主要环节

构建过程包含的主要的环节:
①清理:删除以前的编译结果,为重新编译做好准备。
②编译:将Java源程序编译为字节码文件。
③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
④报告:在每一次测试后以标准的格式记录和展示测试结果。
⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对应jar包,Web工程对应war包。
⑥安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
⑦部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行。

③ 理解自动化构建

小故事:
这是阳光明媚的一天。托马斯向往常一样早早的来到了公司,冲好一杯咖啡,进入了自己的邮箱——很不幸,QA小组发来了一封邮件,报告了他昨天提交的模块的测试结果——有BUG。“好吧,反正也不是第一次”,托马斯摇摇头,进入IDE,运行自己的程序,编译、打包、部署到服务器上,然后按照邮件中的操作路径进行测试。“嗯,没错,这个地方确实有问题”,托马斯说道。于是托马斯开始尝试修复这个BUG,当他差不多有眉目的时候已经到了午饭时间。下午继续工作。BUG很快被修正了,接着托马斯对模块重新进行了编译、打包、部署,测试之后确认没有问题了,回复了QA小组的邮件。一天就这样过去了,明媚的阳光化作了美丽的晚霞,托马斯却觉得生活并不像晚霞那样美好啊。

让我们来梳理一下托马斯这一天中的工作内容
02.什么是Maven - 图2
从中我们发现,托马斯的很大一部分时间花在了“编译、打包、部署、测试”这些程式化的工作上面,而真正需要由“人”的智慧实现的分析问题和编码却只占了很少一部分。
02.什么是Maven - 图3
能否将这些程式化的工作交给机器自动完成呢?——当然可以!这就是自动化构建。
02.什么是Maven - 图4
那么Maven又是如何实现自动化构建的呢?简单的说来就是它可以自动的从构建过程的起点一直执行到终点:
02.什么是Maven - 图5

2、依赖管理

如果A工程里面用到了B工程的类、接口、配置文件等等这样的资源,那么我们就可以说A依赖B。例如:

  • junit-4.12依赖hamcrest-core-1.3
  • thymeleaf-3.0.12.RELEASE依赖ognl-3.1.26
    • ognl-3.1.26依赖javassist-3.20.0-GA
  • thymeleaf-3.0.12.RELEASE依赖attoparser-2.0.5.RELEASE
  • thymeleaf-3.0.12.RELEASE依赖unbescape-1.1.6.RELEASE
  • thymeleaf-3.0.12.RELEASE依赖slf4j-api-1.7.26

依赖管理中要解决的具体问题:

  • jar包的下载:使用Maven之后,jar包会从规范的远程仓库下载到本地
  • jar包之间的依赖:通过依赖的传递性自动完成
  • jar包之间的冲突:通过对依赖的配置进行调整,让某些jar包不会被导入

上一节 下一节 回目录