一、maven介绍
1.软件开发中我们为什么要使用maven呢?(纯属个人体会观点,如有错误,敬请指正)
(1)其一,企业岗位需求,目前的IT开发招聘岗位上,基本都要求会使用maven。
(2)其二,使用maven可以帮助我们解决软件开发中遇到的一些困难问题。我们先来看看项目开发中可能存在的一些问题。
1.1 jar包的依赖与管理 我们都知道,一个项目开发一般都依赖着许多的jar包。jar包的使用可能存在的问题如下:
问题一: 不能确定jar包的完全正确性(比如我们百度下载的jar包,不一定保证其正确性。要是不同的员工下载的jar包都是来自不同的网站,然后在项目中使用,如果没有确保jar包的安全性,如果在生产线上出问题了,将会造成不可估量的损失)
问题二: 不同技术框架版本的管理(如spring2.0、spring2.1、如果同一个公司不同的开发人员使用的jar包版本不一致,比如A使用spring1.0,而B使用spring2.0,导致jar包显得很臃肿,而且可能会产生其他的问题,这样子管理起来就很难)、
问题三: 不同jar包之间的相互依赖(spring2.0中存在的许多的jar包,jar包之间存在着相互依赖的关系,比如a包依赖b包,b又依赖c包,等。我们如何保证每次拷贝jar包的时候不会出现遗漏jar的情况,如果遗漏的jar包的拷贝,程序运行的时候时常就出现了这种ClassNotFoundException的错误等)
那么maven是如何解决jar包的依赖与管理呢?maven允许我们可以自己搭建一个jar仓库,项目中依赖的jar包直接在一个文件中定义声明,同时指定jar包所在的位置,当程序跑起来的时候依赖的jar包maven会帮助我们下载到本地上。这就好比我们程序一样,先定义变量,然后再使用。
1.2 自动构建项目 我们先来了解一下软件开发的过程。
一般软件开发的流程如下:
- 软件开发: 可行性分析--->需求分析--->软件设计--->软件开发--->发布--->运维
那么什么是自动构建项目呢?大体可以这么认为:
- 软件构建: 软件已经开发完毕,需要构建成一个产品进行发布,供用户使用。
我们都知道,在myeclipse上编写的java文件,myeclipse会自动帮助我们编译,然后由我们运行发布。
如果没有这个工具,那么我们应该怎么编译源程序呢。
一般项目构建步骤如下:
清除--> 编译-->测试-->报告-->打包(jarwar)-->安装-->部署到远程
myeclipse虽是一个集成开发工具,但是对上面的项目构建操作只是分开进行操作,而且有些操作并不能进行,比如报告等,需要开发人员自己写报告,这样子就不能达到我们开发效率的要求。
而通过maven的使用, 不仅解决了上面我们遇到的jar包的依赖与管理的问题,而且可以通过一个命令实现自动构建软件项目,到达我们需要的开发效率。当然我们就得学习使用了。
2.引入maven
1. maven介绍
- 介绍: Maven是一个采用纯Java编写的开源项目管理工具,Maven采用了一种被称之为Project Object Model (POM)概念来管理项目, 所有的项目配置信息都被定义在一个叫做POM.xml的文件中, 通过该文件Maven可以管理项目的整个生命周期,包括清除、编译,测试,报告、打包、部署等等。
- pom(项目对象模型)(如何理解pom呢)如下图所示:
我们可以这么理解pom: 比如项目A开发中,我们项目中存在许多的类1,类2....以及各种配置文件等,pom(项目对象模型)管理的不只是项目中的单一类,或者是项目的某个配置文件,而管理的是整个项目A,针对的是整个项目A。
那么什么是软件构建的生命周期呢?我们可以这么理解、
- 软件构建的生命周期
清除--> 编译-->测试-->报告-->打包(jarwar)-->安装-->部署到远程
2. maven 解决的问题
- jar包的声明式依赖管理与管理(图解其优势所在)
以前进行项目开发的时候,我们需要对jar包进行拷贝,经常从不同的项目中拷贝到新的项目。由此就可能产生一些新的问题。比如有些jar包,新项目并不依赖,而我们拷贝过来了,这就显得多余了。而如果我们只拷贝一部分,可能会出现jar包相互依赖导致类找不到的问题。而maven的出现解决了这些问题。maven对项目的结构进行了一些约束,规定项目的目录问题。每个maven项目中都有一个pom.xml文件,maven是通过pom.xml文件来定义项目所依赖的jar包的,我们项目中需要什么jar包就直接在pom.xml中进行定义,需要的时候帮助我们自动进行下载。比如我们可以搭建公司的私服服务器,里面存放了许多的不同版本的jar包。我们在pom.xml文件中定义依赖的jar包,当项目跑起来的时候,会自动到公司私服中寻找依赖的jar包并进行下载到本地,jar包如果存在依赖也会帮助我们进行其他的jar包下载;如果私服中找不到的话,就会自动到中心仓库寻找jar包,当然一般我们需要的jar包都会存在的。