1.Maven的介绍
给大家介绍一款非常强大的项目管理工具,这个管理工具它是Maven,单词的正确发音是[ˈmeɪvn],在美国是一个口语化的词语,代表专家、内行的意思。
有一个对那位比较正式的定义是这么说的:Maven是一个项目管理工具,它包含了一个项目对象模型(POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
读完这段话之后,相信大家对于Maven到底能做什么,Maven在我们的项目开发中到底扮演怎样的角色还是比较迷茫的。不过没关系,我们下面将通过4个在实际开发中经常遇见的问题来更加通俗的告诉大家Maven到底能做什么。
问题1:
大家都知道,凡是开发项目我们就要用到各种各样的jar包,而且项目越大,需要导入的jar包就越多,往往我们开发一个项目要在里面导入几十个,甚至上百个jar包。jar包多了,随之而来就是各种各样的jar包冲突,jar包冲突如果手动解决起来是非常令人抓狂的,作为一个开发人员,我们不可能天天被这种问题所困扰,可是如果这个项目现在交Maven来管理,那么这些假包冲突解决起来就非常的简单。这是Maven能为我们做的第一件事情。
(总结:解决项目中jar包版本冲突)
问题2:
我们辛辛苦苦写好了Java文件,计算机他是不认识的,计算机它只认Java编译成之后变成的class文件,也就是0和1组成的二进制文件,那么好在这个工作现在各种各样的工具都比较强大,可以代替我们来完成,你比如Eclipse、IDEA都可以帮我们把Java文件编译成class文件,今天要给大家介绍的这款工具Maven,也是可以帮我们做这件事情的。这是Maven能为我们做的第2件事情。
(总结:maven有编译源码功能)
问题3:
写代码难免会出现各种各样的问题,为了避免最终问题越来越多,那么在开发的时候就要不断的进行单元测试,那么代码越来越多,所以单元测试也就越来越多。不管有多少单元测试,之前的做法就是一个一个的来测,可是现在如果让Maven来管理我们的项目,他那可以把指定目录下的单元测试全部一次性执行完成,并且告诉你哪些是正确的,哪些是有异常的,这个功能就是Maven可以为我们做的第三件事情。
(总结:统一执行单元测试)
问题4:
那么代码开发完成之后,是要变成产品来出售的。这个再变成产品之前,我们必须做的一件事情就是给这个项目打包,那么不管用Eclipse还是IDEA,咱们都必须自己手动打包,假如我们用了Maven来管理我们的项目,这个打包只用一个命令直接搞定。
(总结:项目打包方便)
可见Maven从我们一开始开发代码,直接到最后项目运行到线上,整个过程中他都可以帮我们来解决各种各样的问题。
2.依赖管理
这里介绍Maven其中一个核心功能,这个核心功能我们将通过一个对比来引出,首先大家看下面这张图,
这张图是使用传统web工程开发好的一个CRM项目,所占磁盘空间大小的图,那么大家可以看到一个开发好的CRM项目所占的磁盘空间是21兆,我可以提前告诉大家,整个CRM项目开发完成里边一共加文件没有超过20个,那么连20个java文件都没有的,一个项目如何能在21M磁盘空间呢?可以大胆猜测,其中大多数磁盘空间是由项目中的jar包所占有的。
接下来对比另外一张图,
这张图是使用Maven开发好的一个CRM项目,这个项目所使用的框架和刚才CRM项目一样,里边的功能和刚才CRM项目也是一模一样,那么它所占的磁盘空间只有124k。
这里有一个疑问,Maven开发的CRM项目和传统web工程开发的CRM项目所使用的框架是一模一样的。既然用到了框架,那么就必须会调用框架中的工具类,要调用框架中的工具类,那Maven项目中又不导入框架中的jar包,他的jar包去拿了呢?
给大家画一张图来解释一下。
我们先来看传统web工程开发的CRM项目,这种项目jar包是在项目中。Maven开发的CRM项目,这种项目jar包不在项目中。那么它的jar包到底去哪了呢?
Maven会把jar包统一放置在一个叫jar包仓库的地方。那么它的jar包并没有在项目中放,它是放置在jar包的仓库中了,那么项目凡是运行和编译的时候肯定需要找到所对应的jar包,他是怎么找到的呢?
这里又有一个概念叫jar包的坐标。当Maven工程编译或者运行的时候,Maven会通过jar包的坐标去仓库找到对应的jar包。那么这个时候如果我说Maven工程大大的节省了我们的磁盘空间,那么有的小伙伴就会说人家传统web工程jar包放在项目中,Maven项目的jar包没有放在项目中,是放在仓库中的,那磁盘空间并没有节省呀?
这个时候我们可以把这个范围想得大一点,假如说有10个传统的web工程,那么我们是否每个项目中都要放一套jar包呢?对,答案是一定的,接下来我们来想,这边有10个Maven工程,那么这10个Maven工程我都可以不放jar包,而所有项目运行所需要的jar包。都从仓库中来找。那么这一次我在说Maven工程大大节省了我们的磁盘空间应该没有疑问了。
其实Maven 它不单为我们节省了磁盘空间,他更大的一个功能是它符合了我们Java开发经常说的一个代码可重用。其实上面描述了一大段,主要是在告诉大家Maven第1个核心功能,它的名字叫依赖管理。
用一句话来总结什么叫依赖管理:依赖管理就是maven工程对jar包的管理过程。具体再说细一点,就是传统项目我们直接把jar包放在项目中,而maven工程真正的jar包是放在jar包的仓库中,而项目中使用放置jar包的坐标,当我们项目编译或运行的时候,maven工程会通过jar包的坐标,去jar包的仓库中找到对应的jar包,那么这个就是我们今天要介绍maven的第1个核心功能依赖。
3.一键构建
介绍Maven另外一个核心功能一键构建,那么首先我们必须要弄清楚什么是构建项目。
对项目进行编译、测试、运行、打包、安装、部署,任何一步操作,其实都是在构建项目。只不过是这些操作对项目构建的程度不一样而已。
那么Maven的一键构建,就是不在使用本地安装的tomcat,而是使用maven自身集成的tomcat插件,来完成这些操作的过程,这就是Maven的一键构建。
如下图
那么Maven的一键构建和本地安装的tomcat的运行项目到底有哪些不一样的?
我们来做一个简单对比,假如说我们现在要运行一个项目,先来说使用本地安装的tomcat,我们必须自己把整个项目打成包,放在tomcat的安装目录下WebApp文件夹下。然后再bin目录下找到startup命令,双击startup命令才能把项目运行起来。
那么我们使用Maven来运行一个项目步骤是什么呢?
我们来看一下,一个非常简单的Maven工程,可以看到Maven工程的结构目录里边有一个非常特别的文件pom.xml,之前我们说到的Maven工程jar包的坐标就写在这里边。
我们可以在命令提示符中,
进入项目目录,然后直接输入mvn tomcat:run,
项目就能够直接运行起来,并且在日志中提供给我们访问的地址。
不用像上边打好war包,放在tomcat中,才能运行。
可以明显看到,使用Maven的一键构建要比直接使用tomcat部署项目便捷。