Maven学习笔记
中文翻译:知识的积累,apache开源项目,跨平台的项目管理。
Maven的主要的用途就是帮助构建项目
Maven抽象了一个完整的构建生命周期模型,这个模型吸取了大量其他的构建脚本和构建工具的优点,总结了大量项目的实际的需求。可以避免不必要的错误,可以直接使用大量成熟的maven插件来外城我们的任务;
Maven的另外一个优点:帮助我们标准的构建过程;在maven之前,是个项目可能有十种构建的方式,有了maven之后所有的项目的构建命令都是简单一致的,这极大地避免了不必要的学习成本,而且有利于促进团队的标准化;
通过Jruby和Jython,我们可以在Java平台上编写和运行Ruby和Python程序;我们也应该认识到maven不仅是构建工具还是一个依赖管理工具和项目信息管理工具;它提供中央仓库,能帮助我们自动下载构件;
通常:版本不一致,版本冲突,依赖管理等问题都会接踵而来,手工解决这些问题时十分枯燥的,幸运的是maven提供了一个优秀的解决方案,他通过一个坐标系统准确的定位每一个构件,也就是通过一组坐标maven能够找到任何一个Java类库;
Nexus是maven的衍生工具;
使用maven就像是购买品牌PC,不同的是maven是开源的,你无需为此付费;
Make也许是最早的构建工具,是由一个名为Makefile的脚本文件驱动,该文件的使用make自己定义的语法格式,其基本组成部分为一系列规则,而每一条的规则又包括Target
(目标),依赖,命令;无法做到跨平台
Ant:another neat tool 另外一个整洁的工具,最早用来构建tomcat,可以跨平台;
Ant 有一个构建脚本的,基本的结构也是target和依赖;
Maven是用来管理项目的:清理,编译,测试,打包,发布;
本地仓库:maven缺省的本地仓库地址为${user.home}/.m2/repository 。也就是说,一个用户会对应的拥有一个本地仓库,还有一点需要理解的是,当我们运行install的时候,Maven实际上是将项目生成的构件安装到了本地仓库,也就是说,只有install了之后,其它项目才能使用此项目生成的构件。
中央仓库:接着了解一下Maven缺省的远程仓库,即Maven中央仓库
这个Maven中央仓库是在哪里定义的呢?在我的机器上,我安装了maven-2.0.10,我可以找到这个文件:${M2_HOME}/lib/maven-2.0.10-uber.jar ,打开该文件,能找到超级POM:\org\apache\maven\project\pom-4.0.0.xml ,它是所有Maven POM的父POM,所有Maven项目继承该配置,你可以在这个POM中发现如下配置:
< repositories >
< repository >
< id >central</ id >
< name >Maven Repository Switchboard</ name >
< layout >default</ layout >
< url >http://repo1.maven.org/maven2</ url >
< snapshots >
< enabled >false</ enabled >
</ snapshots >
</ repository >
</ repositories >
关于远程仓库的配置,下面的小节我会详细解释,这里我们只要知道,中央仓库的id为central,远程url地址为http://repo1.maven.org/maven2,它关闭了snapshot版本构件下载的支持。
前面我们看到超级POM配置了ID为central的远程仓库
如果你的地理位置附近有一个速度更快的central镜像,或者你想覆盖central仓库配置,或者你想为所有POM使用唯一的一个远程仓库(这个远程仓库代理的所有必要的其它仓库),你可以使用settings.xml中的mirror配置。
以下的mirror配置用maven.net.cn覆盖了Maven自带的central:
< settings >
...
< mirrors >
< mirror >
< id >my-org-repo</ id >
< name >Repository in My Orgnization</ name >
< url >http://192.168.1.100/maven2</ url >
< mirrorOf >*</ mirrorOf >
</ mirror >
</ mirrors >
...
</ settings >
mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库。本地Maven仓库的构件只能供当前用户使用,在分发到远程Maven仓库之后,所有能访问该仓库的用户都能使用你的构件。
在安装maven之前,首先要确认已经正常安装了jdk,maven可以运行在jdk1.4及以上的版本;
设置http代理:有时候你所在的公司基于安全因素的考虑,妖气使用通过安全认证的代理访问因特网,这种情况下就需要使用到http代理才能 外部的中央仓库了;
首先确认自己无法直接访问公共的maven中央仓库,直接运行命令ping repol.maven.org可以直接检查网络。
重要的:maven scm:svn是非常流行的版本管理工具,该模块能帮助我们直接重svn服务器签出maven项目,不过需要安装svn
Maven安装的最佳实践:
设置maven_opts环境变量:
运行mvn命令实际上是执行了Java命令,既然是运行Java,那么运行Java命令可用的参数档案也应该在运行mvn命令时可用,这个使用maven_opts环境变量就能排上用场了;
配置用户范围的settings.xml文件(推荐)有利于maven的升级
在eclipse环境中,单击windows preferences maven installation子项目右边add
Maven使用入门:maven的核心是pom.xml文件,Pom(project object model)项目对象模型定义了项目的基本信息,用于描述项目如何构建,申明项目以来等等;
Pom.xml文件中最重要的是包含groupid,artifactid,version的三行,这三个元素定义了一个项目的基本的坐标,在maven的世界里面,任何热jar,pom或者war都是以基于这些基本的坐标进行区分的,groupid是定义项目属于哪个组的,
Artifactid定义了 当前maven项目在组中的唯一的Id
项目中的住代码是会被打包最终构件重如jar文件,测试代码只是运行测试时才会有道,不会被打包;
Clean会告诉maven输出目录target(从输出中看到maven首先执行了clean
杀出了target目录,默认的情况下,maven构建的搜游的输出都在target目录中),compile告诉maven笔记项目的主要代码
上述的pom文件中海油一个值为test的元素scope,scope为依赖范围,若是依赖范围为test的话则表示该依赖支队测试有效;换句话说测试代码中的import Junit代码是没有问题的,但是如果在住代码中庸import Junit代码,就会造成编译错误。如果不申明依赖的范围,那么默认值就是compile,表示该依赖对住代码和测试代码都有效;