maven用途、核心概念、用法、常用参数和命令、扩展

阅读:423 2019-03-19 14:41:04 来源:开源中国

最新内容见:maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置

本文由浅入深,主要介绍maven的用途、核心概念(pom、repositories、artifact、buildlifecycle、goal)介绍、用法(archetype意义及创建各种项目)、maven常用参数和命令以及简单故障排除、maven扩展(eclipse、cobertura、findbugs、插件开发)、maven配置。

本文较长,可根据个人需要有选择性的查看,比如先看用法再回过头来看核心概念

1、maven的用途

maven是一个项目构建和管理的工具,提供了帮助管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。

maven的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性

利用maven自身及其插件还可以获得代码检查报告、单元测试覆盖率、实现持续集成等等。

2、maven的核心概念介绍

2.1pom

pom是指projectobjectmodel。pom是一个xml,在maven2里为pom.xml。是maven工作的基础,在执行task或者goal时,maven会去项目根目录下读取pom.xml获得需要的配置信息

pom文件中包含了项目的信息和mavenbuild项目所需的配置信息,通常有项目信息(如版本、成员)、项目的依赖、插件和goal、build选项等等

pom是可以继承的,通常对于一个大型的项目或是多个module的情况,子模块的pom需要指定父模块的pom

pom文件中节点为

其中groupid:artifactid:version唯一确定了一个artifact

2.2artifact

这个有点不好解释,大致说就是一个项目将要产生的文件,可以是jar文件,源文件,二进制文件,war文件,甚至是pom文件。每个artifact都由groupid:artifactid:version组成的标识符唯一识别。需要被使用(依赖)的artifact都要放在仓库(见repository)中

2.3repositories

repositories是用来存储artifact的。如果说我们的项目产生的artifact是一个个小工具,那么repositories就是一个仓库,里面有我们自己创建的工具,也可以储存别人造的工具,我们在项目中需要使用某种工具时,在pom中声明dependency,编译代码时就会根据dependency去下载工具(artifact),供自己使用。

对于自己的项目完成后可以通过mvninstall命令将项目放到仓库(repositories)中

仓库分为本地仓库和远程仓库,远程仓库是指远程服务器上用于存储artifact的仓库,本地仓库是指本机存储artifact的仓库,对于windows机器本地仓库地址为系统用户的.m2/repository下面。

对于需要的依赖,在pom中添加dependency即可,可以在maven的仓库中搜索:http://mvnrepository.com/

2.4buildlifecycle

是指一个项目build的过程。maven的buildlifecycle分为三种,分别为default(处理项目的部署)、clean(处理项目的清理)、site(处理项目的文档生成)。他们都包含不同的lifecycle。

buildlifecycle是由phases构成的,下面重点介绍defaultbuildlifecycle几个重要的phase

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

若直接以某一个phase为goal,将先执行完它之前的phase,如mvninstall

将会先validate、compile、test、package、integration-test、verify最后再执行installphase

2.5goal

goal代表一个特定任务

mvnpackage表示打包的任务,通过上面的介绍我们知道,这个任务的执行会先执行packagephase之前的phase

mvndeploy表示部署的任务

mvencleaninstall则表示先执行clean的phase(包含其他子phase),再执行install的phase。

3、maven用法

主要讲下archetype以及几种常用项目的创建

maven创建项目是根据archetype(原型)创建的。下面先介绍下archetype

3.1archetype

原型对于项目的作用就相当于模具对于工具的作用,我们想做一个锤子,将铁水倒入模具成型后,稍加修改就可以了。

类似我们可以根据项目类型的需要使用不同的archetype创建项目。通过archetype我们可以快速标准的创建项目。利用archetype创建完项目后都有标准的文件夹目录结构

既然archetype相当于模具,那么当然可以自己再造模具了啊,创建archetype

下面介绍利用maven自带的集中archetype创建项目。创建项目的goal为mvnarchetype:generate,并且指定archetypeartifactid,其中archetypeartifactid见maven自带的archetypeartifactid

3.2quickstart工程

创建一个简单的quickstart项目,指定-darchetypeartifactid为maven-archetype-quickstart,如下命令

其中dgroupid指定groupid,dartifactid指定artifactid,darchetypeartifactid指定archetypeid,

dinteractivemode表示是否使用交互模式,交互模式会让用户填写版本信息之类的,非交互模式采用默认值

这样我们便建好了一个简单的maven项目,目录结构如下:

现在我们可以利用2.4的buildlifecycle进行一些操作,先命令行到工程根目录下

编译mvncompile

打包mvnpackage,此时target目录下会出现maven-quickstart-1.0-snapshot.jar文件,即为打包后文件

打包并安装到本地仓库mvninstall,此时本机仓库会新增maven-quickstart-1.0-snapshot.jar文件。

3.3web工程

创建一个简单的web项目,只需要修-darchetypeartifactid为maven-archetype-webapp即可,如下命令

其他:

srcmainresources文件夹是用来存放资源文件的,maven工程默认没有resources文件夹,如果我们需要用到类似log4j.properties这样的配置文件,就需要在srcmain文件夹下新建resources文件夹,并将log4j.properties放入其中。

test需要用到资源文件,类似放到srctest下

对于apache的log4j没有log4j.properties文件或是目录错误,会报如下异常

4、maven常用参数和命令

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

4.1mvn常用参数

mvn-e显示详细错误

mvn-u强制更新snapshot类型的插件或依赖库(否则maven一天只会更新一次snapshot依赖)

mvn-o运行offline模式,不联网更新依赖

mvn-n仅在当前项目模块执行命令,关闭reactor

mvn-plmodule_name在指定模块上执行命令

mvn-ff在递归执行命令过程中,一旦发生错误就直接退出

mvn-dxxx=yyy指定java全局属性

mvn-pxxx引用profilexxx

4.2首先是2.4buildlifecycle中介绍的命令

mvntest-compile编译测试代码

mvntest运行程序中的单元测试

mvncompile编译项目

mvnpackage打包,此时target目录下会出现maven-quickstart-1.0-snapshot.jar文件,即为打包后文件

mvninstall打包并安装到本地仓库,此时本机仓库会新增maven-quickstart-1.0-snapshot.jar文件。

每个phase都可以作为goal,也可以联合,如之前介绍的mvncleaninstall

4.3maven日用三板斧

mvnarchetype:generate创建maven项目

mvnpackage打包,上面已经介绍过了

mvnpackage-prelease打包,并生成部署用的包,比如deploy/*.tgz

mvninstall打包并安装到本地库

mvneclipse:eclipse生成eclipse项目文件

mvneclipse:clean清除eclipse项目文件

mvnsite生成项目相关信息的网站

4.4maven插件常用参数

mvn-dwtpversion=2.0指定maven版本

mvn-dmaven.test.skip=true如果命令包含了testphase,则忽略单元测试

mvn-duserprop=filepath指定用户自定义配置文件位置

mvn-ddownloadsources=true-declipse.addversiontoprojectname=trueeclipse:eclipse生成eclipse项目文件,尝试从仓库下载源代码,并且生成的项目包含模块版本(注意如果使用公用pom,上述的开关缺省已打开)

4.5maven简单故障排除

mvn-dsurefire.usefile=false如果执行单元测试出错,用该命令可以在console输出失败的单元测试及相关信息

setmaven_opts=-xmx512m-xx:maxpermsize=256m调大jvm内存和持久代,maven/jvmoutofmemoryerror

mvn-xmavenloglevel设定为debug在运行

mvndebug运行jpda允许remotedebug

mvn--help这个就不说了。。

5、maven扩展

maven常用插件配置和使用

6、maven配置

为了修改maven创建项目默认以来的jdk版本,看了下maven配置,可参考http://www.iteye.com/topic/41612

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://www.sonatype.com/books/maven-book/reference_zh/public-book.html

maven安装:http://maven.apache.org/download.html

http://www.infoq.com/cn/search.action?querystring=maven%e5%ae%9e%e6%88%98&searchorder=relevance&search=maven%e5%ae%9e%e6%88%98

转载

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服