Maven学习总结

Maven
一、Maven简介
1.1什么是Maven?
“Maven”一词源自于犹太语,意为“积累”,在英文中的释义是“内行”、“专家”,是Apache组织下一个开源的Java项目,常服务于企业项目构建、依赖管理和项目信息管理。Maven的主要目标是提供给开发人员:
1)项目是可重复使用、易维护、更容易理解的一个综合模型;
2)插件或交互的工具,这种声明式的模式。

1.2 为什么需要Maven
1.2.1 什么是构建
前文中提到一个词“构建”,是指项目的清理、编译、测试、报告、打包、部署这一系列过程。Maven的第一大功能就是帮助我们完成这些繁琐的工作。

图 1 构建
试想一个程序员一天的工作。早晨抵达公司,泡一杯咖啡,打开SVN并从资源库中把最新版本的项目源代码更新到本地,然后开始自己的产品代码编写工作。忙到中午,经理提出要看项目A的测试报告。于是找来了相关的工具,像模像样地生成了测试覆盖率报告,然后发了一封邮件给经理。刚松了口气,打算继续编写代码,不料测试小组又发来了项目B中几个新的BUG。没办法,只好先在本地重现一下“案发现场”。打开Eclipse工具,把项目打成一个WAR包,部署到Web容器中,然后启动容器……按照测试小组提供的BUG报告一步一步地还原BUG出现的场景。好不容易把BUG改完,提交了代码,结束了这一天的工作。第二天,又是如此度过……
通过总结可以发现,除了编写和测试代码,我们一天的工作中大部分时间都花在了编译、单元测试、生成文档、打包、部署等繁琐且不起眼的工作上。这些步骤,就是前文所述的“构建”。这些工作全都由程序员自己来手动完成,不仅费时费力,而且过程中容易出现问题。所以就有人提出了设想,我们是否能把这些琐碎的工作,都交给软件帮我们完成?就像车间流水线那样,只需要传递一条简单的指令,剩下的工作全部都会自动完成,不需要我们过多操心。

1.2.2 构建管理
在学习软件开发的过程中,我们一直在不断地寻找消除重复的方法。设计的重复、代码的重复、报告的重复。当然也包括构建的重复。Maven在最大程度上消除了构建的重复,抽象了构建生命周期,并且为绝大多数构建任务提供了已经实现的插件。我们可以直接拿来取用,不需要再去考虑这个过程如何定义、如何实现。
测试是一个最简单的例子,我们不需要告诉Maven如何去进行测试。甚至,我们都不需要告诉Maven我们要进行测试。只需直接运行构建,所有的测试过程就会被自动执行了。
Maven还有一个好处是帮我们标准化构建过程。在使用Maven之前,十个项目可能有十种不同的构建方式。使用Maven进行构建,所有项目的构建命令都是简单且一致的。极大地避免了不必要的学习成本,也有利于促进团队的标准化。

1.2.3 依赖管理
选择Java进行项目开发的过程中,我们几乎不可避免地会使用到一些开源的第三方类库(例如jar包)。比如我们已经使用过的ojdbc、dom4j、log4j等。这些类库常以依赖的形式引入到项目中来。随着项目规模的不断增大,我们需要用到的依赖也越来越多。一个web项目引入几十个jar包是常有的事。那么就会出现两个问题。首先,这些jar包都需要我们到官方网站或社区、论坛去一个一个下载,非常麻烦。其次,这么多的jar包之间,本身会存在一些版本冲突、版本不一致等问题,会影响项目的正常运行。
对于这个问题,Maven拥有一套优秀的解决方案。它为全世界的Java开发人员提供了一个免费的中央仓库,在这个仓库中可以找到几乎所有流行的、开源的第三方类库。我们只需要在项目中以配置文件的形式提供一小段文本描述,告诉Maven我们需要使用什么依赖。Maven就会从仓库中自动下载这些依赖。

图 2 使用Maven引入log4j依赖包

1.2.4 项目信息管理
Maven的另外一个作用是帮助我们管理原本分散在项目各个角落的信息。包括项目描述、开发者列表、版本控制系统地址、许可证等。这些工作看起来很微小,但实际上不知不觉中已经帮我们节省了大量寻找信息的时间。通过Maven的一些成熟的插件,我们还可以轻松地获取项目文档、测试报告、静态分析报告、源码版本日志报告等非常有价值的项目信息。

1.2.5 项目结构标准化
Java平台的主流的IDE工具有很多,不同的工具所生成的项目结构存在很多不同之处。例如,Eclipse工具生成的Web工程中Web容器根目录名为【WebContent】,而使用MyEclipse工具生成的Web工程中Web容器的根目录名为【WebRoot】。那也就意味着,从MyEclipse中导出的工程,直接导入到Eclipse工具中是无法正常使用的。
如果使用Maven构建项目,就不会存在这个问题。在任何一个平台创建的Maven项目,都能被其他平台识别和导入。第一,在开发阶段解决了人员所使用的开发工具不同而导致的兼容性问题。第二,统一和确定了最终构建输出的项目结构。
二、Maven的安装和配置
2.1 检查JDK安装
前文提到,Maven本身就是一个开源的Java项目。所以在下载和安装Maven之前,要确保所安装的JDK没有问题。
Windows操作系统中,打开命令行CMD窗口。键入如下命令:
echo %JAVA_HOME%
java -version
第一条命令用来查看JAVA_HOME变量所指向的磁盘目录,第二条命令用来查看当前配置的Java版本。
结果应该如下:

图 3 检查Windows平台下的JDK安装状态

Unix/Linux操作系统中,在终端中键入如下命令:
echo $JAVA_HOME
java -version
结果应该如下:

图 4 检查Unix/Linux平台下的JDK安装状态

2.2 Maven下载
Maven官网下载地址:http://maven.apache.org/download.cgi(Ctrl+单击可直接打开)
根据不同的操作系统,选择不同后缀的Maven安装包。
Windows操作系统选择zip格式文件,基于Unix的操作系统选择tar.gz文件。
此外,官网还提供了Maven项目的源代码,如果感兴趣可以选择下载。

2.3 Maven安装和配置
2.3.1 Windows平台下Maven的安装和配置
Windows操作系统中安装Maven比较简单,直接把下载好的zip文件解压到某个磁盘目录即可。例如:D:\maven\apache-maven-3.3.9。

图 5 Windows平台安装Maven
接着,如同Java的配置,需要在系统环境变量中添加Maven相关变量。
1)新建环境变量,变量名为M2_HOME,变量值为Maven安装路径,例如D:\maven\apache-maven-3.3.9。如图所示:

图 6新建M2_HOME环境变量
此变量的作用类似Java中的JAVA_HOME变量。
2)在Path环境变量中添加M2_HOME下的bin目录,变量值为%M2_HOME%\bin。如图所示:

图 7 Path变量中添加bin目录
这一步骤应该比较熟悉,在配置Java的时候也做过类似的操作。这一步骤的目的是为了能够在命令行中使用有关Maven的指令。
配置完毕之后,我们可以通过在命令行执行命令的方式检查Maven的安装和配置是否正确。在命令行CMD中键入如下命令:
echo %M2_HOME%
mvn -v(或mvn -version)
*注意:配置完环境变量需要打开新的CMD窗口执行上述命令,因为CMD具有会话性。
第一条命令检查M2_HOME变量是否指向了正确的安装目录,第二条命令查看Maven的版本、Java、操作系统等信息。结果应该如下:

图 8 检查Maven安装结果

2.3.2 Unix/Linux平台下Maven的安装和配置
Unix/Linux操作系统中,先把下载好的安装包放到/opt目录下。
然后在终端键入命令解压安装包:
cd /opt
tar -xzvf apache-maven-3.3.9-bin.tar.gz (自行修改文件名)

图 9 Unix/Linux解压Maven安装包
接着,同样需要配置系统环境变量。键入如下命令编辑家目录下的.bashrc文件:
vi ~/.bashrc
在文件末尾处添加如下内容:
export M2_HOME=/opt/apache-maven-3.3.9
export PATH= P A T H : PATH: PATH:M2_HOME/bin

图 10 Unix/Linux下配置Maven
保存退出,并打开新的终端,键入如下命令检查安装和配置是否正确:
echo $M2_HOME
mvn -v
结果应该如下:

图 11 检查Maven安装结果
2.4 Maven升级
Maven作为一个开源的Java项目,版本也在不断升级,目前官网最新版本为3.6.0。在使用的过程中,我们可能会发现旧版本中出现了问题需要升级Maven,或者项目中需要使用Maven新版本中的新特性。升级Maven只需要到官方网站下载新版本的安装包,解压到磁盘某个位置,然后修改系统环境变量M2_HOME即可。
另外,不建议使用最新版本的Maven。不仅Maven如此,其他软件和插件也是一样。新版本虽然具有很多新的特性,但同时也可能伴随着很多未知的BUG。软件开发更多的时候谋求的是系统的稳定,一般都会选择一个相对牢靠的版本,例如本文所使用的Maven3.3.9版本。

2.5 Maven目录结构说明
打开Maven的安装根目录D:\maven\apache-maven-3.3.9,我们可以看到目录结构如下:

图 12 Maven安装目录结构
我们以Windows平台为例,简单说明Maven根目录中的文件及目录作用。
·bin目录
该目录存放的是有关Maven的可执行程序。在命令行CMD中执行的每一条Maven相关的指令,实则在该目录都存在一个对应的运行脚本。
·boot目录
该目录下只有一个文件plexus-classworlds.jar。这是一个Maven自己独有的类加载框架,用来加载Maven中的类库。类似Java中的类加载器。
·conf目录
该目录用来存放Maven的配置信息。其中有一个很重要的配置文件setting.xml,直接修改这个文件,就可以全局控制Maven的行为。后面的章节中会提到的有关仓库、代理的配置都将在这个文件中操作。
·lib目录
Maven正常运行所需要的类库。可以这样理解,该目录下的所有文件综合起来,就是Maven的真身。
·LICENSE文件
Maven使用的软件许可证。
·NOTICE文件
记录了Maven使用的第三方软件。
·READEME.txt
记录了Maven的简介、基本使用方法等信息。

2.6设置HTTP代理
首先注意,这一步骤不是必要的,正常情况不需要设置。
有些公司出于安全因素考虑,规定设置代理才能够正常访问网络。在这样的情况下,就需要为Maven配置HTTP代理,才能够顺利访问外部仓库并获取资源。
首先获取代理服务器的IP和代理服务的端口号,可以先运行teln

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值