Maven介绍,包括做用、核心概念、用法、经常使用命令、扩展及配置

由浅入深,主要介绍maven的用途、核心概念(Pom、Repositories、Artifact、Build Lifecycle、Goal)、用法(Archetype意义及建立各类项目)、maven经常使用参数和命令以及简单故障排除、maven扩展(eclipse、cobertura、findbugs、插件开发)、maven配置
较长,可根据我的须要有选择性的查看,好比先看用法再回过头来看核心概念html

一、maven的用途
maven是一个项目构建和管理的工具,提供了帮助管理 构建、文档、报告、依赖、scms、发布、分发的方法。能够方便的编译代码、进行依赖管理、管理二进制库等等。
maven的好处在于能够将项目过程规范化、自动化、高效化以及强大的可扩展性
利用maven自身及其插件还能够得到代码检查报告、单元测试覆盖率、实现持续集成等等。java

 

二、maven的核心概念介绍
2.1 Pom
pom是指project object Model。pom是一个xml,在maven2里为pom.xml。是maven工做的基础,在执行task或者goal时,maven会去项目根目录下读取pom.xml得到须要的配置信息
pom文件中包含了项目的信息和maven build项目所需的配置信息,一般有项目信息(如版本、成员)、项目的依赖、插件和goal、build选项等等
pom是能够继承的,一般对于一个大型的项目或是多个module的状况,子模块的pom须要指定父模块的pomreact

pom文件中节点含义以下:web

其中groupId:artifactId:version惟一肯定了一个artifactapache

 

2.2 Artifact
这个有点很差解释,大体说就是一个项目将要产生的文件,能够是jar文件,源文件,二进制文件,war文件,甚至是pom文件。每一个artifact都由groupId:artifactId:version组成的标识符惟一识别。须要被使用(依赖)的artifact都要放在仓库(见Repository)中windows

 

2.3 Repositories
Repositories是用来存储Artifact的。若是说咱们的项目产生的Artifact是一个个小工具,那么Repositories就是一个仓库,里面有咱们本身建立的工具,也能够储存别人造的工具,咱们在项目中须要使用某种工具时,在pom中声明dependency,编译代码时就会根据dependency去下载工具(Artifact),供本身使用。
对于本身的项目完成后能够经过mvn install命令将项目放到仓库(Repositories)中
仓库分为本地仓库和远程仓库,远程仓库是指远程服务器上用于存储Artifact的仓库,本地仓库是指本机存储Artifact的仓库,对于windows机器本地仓库地址为系统用户的.m2/repository下面。
对于须要的依赖,在pom中添加dependency便可,能够在maven的仓库中搜索:http://mvnrepository.com/服务器

 

2.4 Build Lifecycle
是指一个项目build的过程。maven的Build Lifecycle分为三种,分别为default(处理项目的部署)、clean(处理项目的清理)、site(处理项目的文档生成)。他们都包含不一样的lifecycle。
Build Lifecycle是由phases构成的,下面重点介绍default Build Lifecycle几个重要的phaseapp

以上的phase是有序的(注意实际两个相邻phase之间还有其余phase被省略,完整phase见lifecycle),下面一个phase的执行必须在上一个phase完成后eclipse

若直接以某一个phase为goal,将先执行完它以前的phase,如mvn install
将会先validate、compile、test、package、integration-test、verify最后再执行install phasewebapp

 

2.5 Goal
goal表明一个特定任务

mvn package表示打包的任务,经过上面的介绍咱们知道,这个任务的执行会先执行package phase以前的phase
mvn deploy表示部署的任务
mven clean install则表示先执行clean的phase(包含其余子phase),再执行install的phase。

 

三、maven用法
主要讲下Archetype以及几种经常使用项目的建立
maven建立项目是根据Archetype(原型)建立的。下面先介绍下Archetype
3.1 Archetype
原型对于项目的做用就至关于模具对于工具的做用,咱们想作一个锤子,将铁水倒入模具成型后,稍加修改就能够了。
相似咱们能够根据项目类型的须要使用不一样的Archetype建立项目。经过Archetype咱们能够快速标准的建立项目。利用Archetype建立完项目后都有标准的文件夹目录结构
既然Archetype至关于模具,那么固然能够本身再造模具了啊,建立Archetype
下面介绍利用maven自带的集中Archetype建立项目。建立项目的goal为mvn archetype:generate,而且指定archetypeArtifactId,其中archetypeArtifactId见maven自带的archetypeArtifactId

 

3.2 quick start工程
建立一个简单的quick start项目,指定 -DarchetypeArtifactId为maven-archetype-quickstart,以下命令
Xml代码 收藏代码
mvn archetype:generate -DgroupId=com.trinea.maven.test -DartifactId=maven-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
其中DgroupId指定groupId,DartifactId指定artifactId,DarchetypeArtifactId指定ArchetypeId,
DinteractiveMode表示是否使用交互模式,交互模式会让用户填写版本信息之类的,非交互模式采用默认值
这样咱们便建好了一个简单的maven项目,目录结构以下:

maven quick start

如今咱们能够利用2.4的build Lifecycle进行一些操做,先命令行到工程根目录下
编译 mvn compile
打包 mvn package,此时target目录下会出现maven-quickstart-1.0-SNAPSHOT.jar文件,即为打包后文件
打包并安装到本地仓库mvn install,此时本机仓库会新增maven-quickstart-1.0-SNAPSHOT.jar文件。

 

3.3 web工程
建立一个简单的web项目,只须要修 -DarchetypeArtifactId为maven-archetype-webapp便可,以下命令

maven web start

其余:

src\main\resources文件夹是用来存放资源文件的,maven工程默认没有resources文件夹,若是咱们须要用到相似log4j.properties这样的配置文件,就须要在src\main文件夹下新建resources文件夹,并将log4j.properties放入其中。
test须要用到资源文件,相似放到src\test下
对于apache的log4j没有log4j.properties文件或是目录错误,会报以下异常

 

四、maven经常使用参数和命令
主要介绍maven经常使用参数和命令以及简单故障排除

4.1 mvn经常使用参数
mvn -e 显示详细错误
mvn -U 强制更新snapshot类型的插件或依赖库(不然maven一天只会更新一次snapshot依赖)
mvn -o 运行offline模式,不联网更新依赖
mvn -N仅在当前项目模块执行命令,关闭reactor
mvn -pl module_name在指定模块上执行命令
mvn -ff 在递归执行命令过程当中,一旦发生错误就直接退出
mvn -Dxxx=yyy指定java全局属性
mvn -Pxxx引用profile xxx

 

4.2 首先是2.4 Build Lifecycle中介绍的命令
mvn test-compile 编译测试代码
mvn test 运行程序中的单元测试

mvn compile 编译项目
mvn package 打包,此时target目录下会出现maven-quickstart-1.0-SNAPSHOT.jar文件,即为打包后文件
mvn install 打包并安装到本地仓库,此时本机仓库会新增maven-quickstart-1.0-SNAPSHOT.jar文件。
每一个phase均可以做为goal,也能够联合,如以前介绍的mvn clean install

 

4.3 maven 日用三板斧
mvn archetype:generate 建立maven项目
mvn package 打包,上面已经介绍过了
mvn package -Prelease打包,并生成部署用的包,好比deploy/*.tgz
mvn install 打包并安装到本地库
mvn eclipse:eclipse 生成eclipse项目文件
mvn eclipse:clean 清除eclipse项目文件
mvn site 生成项目相关信息的网站

 

4.4 maven插件经常使用参数
mvn -Dwtpversion=2.0 指定maven版本
mvn -Dmaven.test.skip=true 若是命令包含了test phase,则忽略单元测试
mvn -DuserProp=filePath 指定用户自定义配置文件位置
mvn -DdownloadSources=true -Declipse.addVersionToProjectName=true eclipse:eclipse 生成eclipse项目文件,尝试从仓库下载源代码,而且生成的项目包含模块版本(注意若是使用公用POM,上述的开关缺省已打开)

 

4.5 maven简单故障排除

mvn -Dsurefire.useFile=false若是执行单元测试出错,用该命令能够在console输出失败的单元测试及相关信息
set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m 调大jvm内存和持久代,maven/jvm out of memory error
mvn -X maven log level设定为debug在运行
mvndebug 运行jpda容许remote debug
mvn –help 这个就不说了。。

 

五、maven扩展
maven经常使用插件配置和使用

 

六、maven配置
为了修改maven建立项目默认以来的jdk版本,看了下maven配置
maven2.0默认使用jdk1.5致使检讨、@override 等annotation不可用。可用两种方法修改jdk版本
第一种:修改项目的pom.xml,影响单个项目,治标不治本

pom中增长build配置,指定java版本为1.6
第二种:修改maven配置,影响maven创建的全部项目
到maven安装目录的conf文件夹下,修改settings.xml文件,以下:

这样便能对全部默认的maven项目指定jdk为1.6

 

到此为止,休息会儿

 

参考资料:
Maven官方文档:http://maven.apache.org/guides/index.html
maven安装:http://maven.apache.org/download.html

相关文章
相关标签/搜索