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

article/2025/9/14 21:02:50

来源:http://www.trinea.cn/android/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

 

到此为止,休息会儿



http://chatgpt.dhexx.cn/article/g4xsAABr.shtml

相关文章

git、mvn实用(1):git常用命令

开发常用命令: a、切换到要开放的远端分支,根据当前分支,新建一个本地分支xxl-branch:git checkout -b xxl-branch b、将本地分支作为远程分支xxl-branch,分支提交到远程仓库也可以用这个命令(如果报错&a…

『网络迷踪』ctfshow-网络迷踪(部分)

文章目录 前言搜图引擎通过投影定位工具 新手上路初学乍练解法一解法二 初学又练初学再练[未解出]现拉现吃初窥门径狗哥去哪国足加油解法一解法二解法三 致我超吧山外有山密集恐惧哐啷哐啷鲇鱼之谜这里有轨爆破不了目之所及[未解出]窗外风景[未解出]来点福利你的名字噶即正义完…

ctfshow七夕杯2022

文章目录 Webweb签到easy_calceasy_cmd Crypto密码签到 Misc杂项签到 Osint社工签到迷失的大象大飞机 原文 Web web签到 固定长度RCE,限定7位数字,直接给出exp # -*- coding: utf-8 -*- # Time : 2022/8/4 22:03 # Author : pysnow # !/usr/bin/pytho…

ctfshow 网络迷踪做题记录(1)

ctfshow 网络迷踪做题记录(1) —— 新手上路 找桥的名字。 附件为一张海边图片。 百度识图为蜈支洲岛,得到地点名,但还需要具体桥的名字。 再用搜索引擎搜索关键字,就可以看到结果中的“情人桥”。 —— —— …

ctfshow 网络迷踪 all 笔记(同步更新)

不小心拿了一点一血阿巴阿巴q大概看一下莫 提供下思路就好 手机写太麻烦了 有的题懒得放图片跟flag 仅提供思路:p 文章目录 1.新手上路2.初学乍练3.初学又练4.初学再练5. 现拉现吃6.初窥门径7.狗哥去哪8.国足加油9.致我超吧10.山外有山11.密集恐惧12.哐啷哐啷13、鲶…

ctfshow--网络迷踪

前言 记录一下做题过程。 如有不当之处,还望指正。 如有疑问,欢迎留言。 目录 前言1. 新手上路2. 初学乍练3. 初学又练4. 初学再练5. 现拉现吃6. 初窥门径7. 狗哥去哪8. 国足加油9. 致我超吧10. 山外有山11. 密集恐惧12. 哐啷哐啷13. 鲶鱼之谜14. 这里有…

NLP+VS︱深度学习数据集标注工具、图像语料数据库、实验室搜索ing...

~~因为不太会使用opencv、matlab工具,所以在找一些比较简单的工具。 . 一、NLP标注工具 来源:《构想:中文文本标注工具(附开源文本标注工具列表)》 Chinese-Annotator 来源:https://github.com/crownpku/…

Python图像处理,cv2模块,OpenCV实现检索图片

前言 利用Python实现OpenCV实现检索图片。废话不多说。 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: cv2模块; 以及一些Python自带的模块。 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即…

搜狗搜索事业部总经理:从识图搜索谈未来大势

经过近半年的独立研发,搜狗搜索推出了识图搜索功能,即可通过上传图片等方式搜索找到相似群组图片和资料。日前,就这一新功能以及搜索领域热点话题,CSDN记者专访了搜狗公司搜索事业部总经理茹立云。 搜狗公司搜索事业部总经理茹立云…

计算机视觉是否已经进入瓶颈期?

作者:周博磊 链接:https://www.zhihu.com/question/51863955/answer/127888709 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 其实这个问题也是我近段时间一直在思考的问题. 昨天刚在组里做…

淘宝/天猫API:img2text-图片识别商品接口

万邦淘宝/天猫图片识别商品接口 API 返回值说明 img2text-图片识别商品接口 onebound.taobao.img2text 公共参数 请求地址: https://console.open.onebound.cn/console/?ipony 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secret…

怎样找一张图片的原图、出处?最全搜图网站+具体案例分享

前不久随手帮一网友找了张图,想了想中间的经历挺有意思,所以今天打算来说说以图搜图这个话题 第一部分,先介绍常用的识图引擎第二部分,想分享一下阿虚自己的搜图经验,也是今天主要想分享的。 ▍1 首先推荐几个识图引…

【码云周刊第 28 期】计算机视觉时代的识图技术

为什么80%的码农都做不了架构师?>>> Venture Scanner 追踪了全球957家人工智能公司,总融资额为48亿美金。其中,机器学习、自然语言处理、计算机视觉等认知技术占据当前市场主导地位。计算机视觉作为一种人工智能的基础技术应用&a…

生信识图之 点图进阶-4 (PCA下篇)

各位亲爱的土豪富婆,承蒙您慧眼识珠大驾光临大Y老师为您准备的小灶课堂。 近期有朋友说发现有人抄袭咱们的文章,自标为“原创”。对此大Y老师有心理准备,咱们的每一篇文章都是大Y老师仔细思考后字斟句酌写下来的,好内容被抄袭已经…

用html和css做搜狗网页,搜狗识图的十大用法,你用过几种

搜狗识图的十大用法,你用过几种 CSS布局HTML小编今天和大家分享美 哪种输入法新功能 识图出文字搜狗输入法就可以。 点击输入框弹出搜狗键盘,进入搜狗工具栏的小键盘图标,进入加号添加文字扫描。 识图软件有百度识图、搜狗识图、TinEye、360识…

Chrome扩展 - 百度识图

我经常搜集些小图片,网上的图片往往都有水印(特别是现在微博发的图片,几乎右下角都有水印)或者比较小,经常会有想找图片原始的版本的冲动。 最近我才发现原来百度有个识图搜索,可以搜索出相似的图片&#x…

华为MIB关键字IOD查询地址及方法

官方地址 https://support.huawei.com/onlinetoolweb/infoM/index.do?langzh&domain1 输入设备型号 版本 display version #输入命令查询版本 启动时间查询 snmpwalk -v 3 -u 安全用户名 -a SHA -A 认证密码 -x AES -X 加密密码 -l authPriv 设备地址 1.3.6.1.4.1.2011.…

导航上显示某个地点已关闭什么意思_大众MIB(275)教程之导航使用

大众可以说近几年的发展非常快,仅车载收音机都更换了好几代了。从最初的单纯收音机到后来的6碟CD机RCD510,最初国内上市的导航RNS510,还有后来自带蓝牙的RNS315,再到PQ平台187A,当初抄的也是火的很几乎每天都能看到187…

php 中mb开头什么意思,mb是兆的意思吗

MB是兆的意思,MB是英文“MByte”的简写,是计算机中的一种储存单位;MByte是指字节数量,Mbit是指比特位数,MByte中的“Byte”虽然与Mbit中的“bit”翻译一样,都是比特,也都是数据量度单位&#xf…

SNMP原理和MIB库

目录 背景概述 SNMP简介 基于SNMP的网管结构概述 SNMP协议 SNMP报文格式 报文处理过程 MIB MIB树结构 参考 背景概述 随着网络的规模越来越庞大,网络中的设备种类繁多,如何对越来越复杂的网络进行有效的管理,从而提供高质量的网络服…