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

两年半前写的关于Maven的介绍,现在看来都还是不错的,自己转下。写博客的一大好处就是方便自己以后查阅,自己总结的总是最靠谱的。

 

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

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

 

2、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需要指定父模块的pom

pom文件中节点含义如下:

其中groupId:artifactId:version唯一确定了一个artifact

 

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

 

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几个重要的phase

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

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

 

2.5 Goal
goal代表一个特定任务

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

 

3、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文件或是目录错误,会报如下异常

 

4、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 这个就不说了。。

 

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

 

6、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#枚举(Enum)小结

枚举概念 枚举类型(也称为枚举)提供了一种有效的方式来定义可能分配给变量的一组已命名整数常量。该类型使用enum关键字声明。 示例代码1 enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday }; 默认情况下枚举中每个元素的基本…

用js实现导航栏shoufang效果_【读者投稿】用Github+docsify,我花了半天就搭好了个人博客...

前言“作为一个真正的码农,不能没有自己的个人博客”,这是我说的。惭愧的是,入行两年多了都没搞起来,这让我一度怀疑自己是个假程序员。昨天终于克服了心里的“犹豫”和“恐惧”,尝试搭建了一把,半天就搞好…

ubuntu 重定向

重定向 (重新设定方向) ls > xxx.txt 将ls显示的内容写入到xxx.txt ls -lah > xxx.txt ls >> xxx.txt 将ls显示的内容以追加方式写入到xxx.txt

IDEA快捷键及xml文件中网址报错

AltShiftTab 切换窗口(从后往前) divTab    补全为 <div></div> #boxTab   补全为 <div id"box"></div> .boxTab   补全为 <div class"box"></div> …

python随机生成数字列表_详解Python利用random生成一个列表内的随机数

首先,需要导入random模块: import random 随机取1-33之间的1个随机数&#xff0c;可能重复: random.choice(range(1,34)) print得到一系列随机数,执行一次得到一个随机数: print(random.choice(range(1,34))) 随机取1-33之间的6个随机数&#xff0c;可能重复: random.choices(r…

构建Java Web开发环境

1.1 JDK&#xff08;Java Development Kit&#xff09;的安装与配置1.1.1 下载最新的JDK&#xff08;我下载的是Java SE 6 Update 25&#xff09;下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/index.html1.1.2 JDK的安装1、双击名为“jdk-6u2…

ubuntu cd 改变路径

. 表示当前路径 cd &#xff0e;&#xff0e; 后退到上一层路径 cd ../.. 调到上上层路径,相对路径 cd /home/hjd/ 绝对路径 cd ~ 回到家目录 &#xff08;/home/hjd/&#xff09;

cloud foundry_Spring 3.1,Cloud Foundry和本地开发

cloud foundry这篇文章将帮助您在Cloud Foundry上使用MongoDB构建Spring 3.1 Web应用程序。 除了推动Cloud Foundry之外&#xff0c;您还可以使用MongoDB实例在本地环境中进行开发。 目标 此博客发布的目标是在本地构建应用程序&#xff0c;然后发布到本地Cloud Foundry实例。…

python中continue用法案例_Python continue语句实例用法

Python continue语句&#xff1a; 当执行到 continue 语句时&#xff0c;将不再执行本次循环中 continue 语句接下来的部分&#xff0c;而是继续下一次循环。 lst [7,8,9,4,5,6] for i in range(len(lst)): if lst[i] 9: continue #当运行到 continue 语句时&#xff0c;不执…

eclipse中查看某个方法(函数)被谁调用

用了好久一直不知道eclipse中如何实现vs中查找所有引用的功能&#xff0c;今天终于发现了哈哈 选中要查找的方法名&#xff0c;右键->References->Workspace 可以定位到具体的调用位置&#xff0c;快捷键CtrlShiftG&#xff0c;在Search中就会出现调用方法 或者是 右键-&…

ubuntu ln软连接硬连接

软连接:相当于windows的快捷方式 硬连接&#xff1a;又创建了一个名字指向同一个内存区&#xff0c;相当于又复制了一个同样的内容 ln -s 1.txt 2.txt 将文件1.txt建立2.txt软连接 相当于快捷方式 ln 1.txt 3.txt 将文件1.txt建立3.txt硬连接,

一个简单的Map Iterator性能测试

Java Map性能有很多方面可以衡量&#xff0c;但是关键的一个是简单的单线程扫描。 这是一些针对Iterators和Java 8 Map.forEach()简单测试代码&#xff0c;以及一些图形结果。 1.性能测试困难 性能测试是一项非常困难的工作&#xff0c;精确的可重复测试需要Java微基准测试线束…

小数点后保留2位小数的正则表达式

一、前提 整数和小数&#xff0c;保留两位小数的正则表达式&#xff1a; 具体什么意思呢  ^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){0,2})?$ 二、知识点 1、首先从写法上可以看出&#xff0c;使用了显式定义正则表达式的语法&#xff0c;因为其中存在对字符串"\"&…

python字符串是什么_python字符串表示什么

python的字符串就是表示一串字符&#xff0c;字符可以是中文&#xff0c;英文或者数字&#xff0c;或者混合的文本。 python字符串的几种表达方式 1 使用单引号扩起来字符串>>> my python lession #以单引号将字符串扩起来 my python lession >>> a my pyth…

PgSql备份pg_dump与还原手记pg_restore(转)

备份&#xff1a;pg_dump -h localhost -p 5432 -U tradesns -W -F c -b -v -f "/home/tradeworkwangbin/us2010.backup" us2010 恢复&#xff1a;pg_restore -h 192.168.0.100 -p 5432 -U postgres -W -d us2011 -v "/root/us2010.backup" 真没有想到&…

ubuntu ls命令

ls 显示当前文件夹下文件 ls -l 列表显示 ls -a 显示隐藏文件 ls -h 文件大小&#xff0c;自动找单位&#xff08;Kb、M、G&#xff09; 也可以 ls -l -a -h &#xff08;-l -a -h没有先后顺序&#xff0c;-a -h -l&#xff09; 也可以 ls -lah &…

vue 在 html 中自定义 tag

v-if,v-for,:key,:style,v-text,click,:src,:poster,:class,:href转载于:https://www.cnblogs.com/whm-blog/p/10718697.html

cmd进入python环境_python2和python3同时存在,如何CMD中进入不同的环境

当电脑上同时装了python2和python3时&#xff0c;虽然在二者的路径都写入了环境变量PATH中&#xff0c;但是在CMD中运行python命令时只能进入2或者3&#xff08;安装顺序不同进入的也不同&#xff09;&#xff0c;如何进入想要的python版本环境中&#xff1a; 1.首先将二者的的…

ubuntu grep搜索文本

grep &#xff08;Global search Regular Expression and Print out the line&#xff09; grep “ntfs” xxx.txt 显示xxx.txt包括ntfs行 grep -n “ntfs” xxx.txt 显示xxx.txt包括ntfs行&#xff0c;行数 grep -v “ntfs” xxx.txt 显示xxx.txt不包括ntfs行 grep…

java 死锁 解决_Java死锁故障排除和解决

java 死锁 解决JavaOne年度会议的一大优点是主题专家介绍了几个技术和故障排除实验室。 这些实验室之一尤其引起了我的关注&#xff1a;Java冠军Heinz Kabutz提出的“ HOL6500-查找和解决Java死锁 ”。 这是我在该主题上看到的最好的演示之一。 我建议您自己下载&#xff0c;运…