Maven学习(1)-----概念,作用详解,配置

简介
maven意思为”知识的积累”,是一款跨平台管理工具,服务主要基于java平台的项目构建,依赖管理和项目信息管理。
故事:张三和李四同一天开了卤肉店,张三的店成了百年老店而李四很快就倒闭了;为什么张三店开百年?秘密是他们卤汁没有换过,老店的特殊卤香一直在岁月中沉淀,而李四的店出一锅肉就要换一次香料,最后导致因成本太高(每次清洗),没有可以传承的标志(卤香),每次的卤肉味道不相同而倒闭。


maven—来由和张三的经营理念一样;比如开展新项目,经过协商,决定使用Spring、iBatis和Tapstry。jar包去哪里找呢?公司里估计没有人能把Spring、iBatis和Tapstry所使用的jar包一个不少地找出来。大家的做法是,先到Spring的站点上去找一个spring,dependencies,然后去iBatis的网站上把所有列出来的jar包下载下来,对Tapstry、Apache commons等执行同样的操作。项目还没有开始,WEB-INF/lib下已经有近百个jar包了,带版本号的、不带版本号的、有用的、没用的、相冲突的,怎一个“乱”字了得
—— Maven不仅是构建工具,还是一个依赖管理工具和项目信息管理工具。它提供了中央仓库,能帮我们自动下载构件。


——在这个开源的年代里,几乎任何Java应用都会借用一些第三方的开源类库,这些类库都可通过依赖的方式引入到项目中来。随着依赖的增多,版本不一致、版本冲突、依赖臃肿等问题都会接踵而来。手工解决这些问题是十分枯燥的,幸运的是Maven提供了一个优秀的解决方案,它通过一个坐标系统准确地定位每一个构件((atifact),也就是通过一组坐标Maven能够找到任何一个Java类库(如jar文件)。Maven给这个类库世界引入了经纬,让它们变得有秩序,于是我们可以借助它来有序地管理依赖,轻松地解决那些繁杂的依赖问题。



1 Maven的安装和配置

1.1maven 安装

这部分相对基础,就简要带过了。可从apache官方下载最新的Maven 压缩包,解压即可。然后设置下系统的环境变量。如下所示:
跟配置jdk差不多一样!
MAVEN_HOME=D:\bin\apache-maven-3.0(变量值为Maven的安装目录)。
Path=,%MAVEN_HOME%\bin;(在变量值的末尾加上)。注意:多个值之间需要有分号隔开,然后单击“确定”按钮。至此,环境变量设置完成。

1.2 maven 安装目录介绍

bin
该目录包含了mvn运行的脚本,这些脚本用来配置Java命令,准备好classpath和相关的Java系统属性,然后执行Java命令。其中mvn是基于UNIX平台的shell脚本,mvn.bat是基于Windows平台的bat脚本。

boot
该目录只包含一个文件,以maven 3.0为例,该文件为plexus-classworlds-2.2.3.jar。plexus-classworlds是一个类加载器框架,相对于默认的java类加载器,它提供了更丰富的语法以方便配置,Maven使用该框架加载自己的类库。更多关于classworlds的信息请参考http://classworlds.codehaus.org/。 对于一般的Maven用户来说,不必关心该文件。

conf
该目录包含了一个非常重要的文件settings.xml。直接修改该文件,就能在机器上全局地定制Maven的行为。

lib
该目录包含了所有Maven运行时需要的Java类库,Maven本身是分模块开发的,因此用户能看到诸如mavn-core-3.0.jar、maven-model-3.0.jar之类的文件,此外这里还包含一些Maven用到的第三方依赖如common-cli-1.2.jar、google-collection-1.0.jar等等。

1.3 ~/.m2目录

在用户目录下,我们可以发现.m2文件夹。默认情况下,该文件夹下放置了Maven本地仓库.m2/repository。所有的Maven构件(artifact)都被存储到该仓库中,以方便重用。默认情况下,~/.m2目录下除了repository仓库之外就没有其他目录和文件了,不过大多数Maven用户需要复制M2HOME/conf/settings.xml文件到~/.m2/settings.xml

1.4 设置HTTP代理

编辑~/.m2/settings.xml文件(如果没有该文件,则复制$M2HOME/conf/settings.xml)。添加代理配置如下:





my-proxy
true
http
代理服务器主机名
端口号





1.5 m2eclipse(eclipse maven插件)

启动Eclipse之后,在菜单栏中选择Help,然后选择 Install New Software…,接着你会看到一个Install对话框,点击Work with:字段边上的Add按钮,你会得到一个新的Add Repository对话框,在Name字段中输入m2e,Location字段中输入http://m2eclipse.sonatype.org/sites/m2e ,然后点击OK。Eclipse会下载m2eclipse安装站点上的资源信息。



2 Maven与其他构建工具的比较(IDE,Make,Ant)

2.1 maven形象的比喻

使用脚本建立高度自定义的构建系统就像买组装PC,耗时费力,结果也不一定很好。当然,你可以享受从无到有的乐趣,但恐怕实际项目中无法给你那么多时间。使用Maven就像购买品牌PC,省时省力,并能得到成熟的构建系统,还能得到来自于Maven社区的大量支持。

2.2 IDE

依赖大量的手工操作。编译、测试、代码生成等工作都是相互独立的,很难一键完成所有工作。手工劳动往往意味着低效,意味着容易出错。很难在项目中统一所有的IDE配置,每个人都有自己的喜好。也正是由于这个原因,一个在机器A上可以成功运行的任务,到了机器B的IDE中可能就会失败。

2.3 Make

Make将自己和操作系统绑定在一起了。也就是说,使用Make,就不能实现(至少很难)跨平台的构建,这对于Java来说是非常不友好的。此外,Makefile的语法也成问题,很多人抱怨Make构建失败的原因往往是一个难以发现的空格或Tab使用错误。

2.4 Ant

和Make一样,Ant也都是过程式的,开发者显式地指定每一个目标,以及完成该目标所需要执行的任务。针对每一个项目,开发者都需要重新编写这一过程,这里其实隐含着很大的重复。Maven是声明式的,项目构建过程和过程各个阶段所需的工作都由插件实现,并且大部分插件都是现成的,开发者只需要声明项目的基本元素,Maven就执行内置的、完整的构建过程。这在很大程度上消除了重复。
Ant是没有依赖管理的,所以很长一段时间Ant用户都不得不手工管理依赖,这是一个令人头疼的问题。幸运的是,Ant用户现在可以借助Ivy管理依赖。而对于Maven用户来说,依赖管理是理所当然的,Maven不仅内置了依赖管理,更有一个可能拥有全世界最多Java开源软件包的中央仓库,Maven用户无须进行任何配置就可以直接享用。



总结:给以我们更好的开发环境,自动配置插件以及jar包等的依赖管理特性,避免程序的臃肿和管理混乱。
比喻:鞋子生产机器(maven),有人去保养它(配置pom.xml),就算工厂换地址能快速生产鞋子(换一个项目直接能用不会出现混乱方便管理),没有maven(一般的老旧的项目管理环境),好比一个鞋厂没有机器全部是人工制造鞋子,费时费力管理不方便,换了地址就得重新招聘人手(重新找jar包等);而且每个工人的技术不一样,导致鞋子质量不统一(项目臃肿)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值