Maven学习总结

Maven的定义:
Apache Maven 是一套软件工程管理和整合工具。基于工程对象模型(POM)的概念,通过一个中央信息管理模块,Maven 能够管理项目的构建、报告和文档。

Maven能做什么?
构建
文档生成
报告
依赖
SCMs
发布
分发
邮件列表

主要是能简化工程的构建过程,使其标准化。

POM
是一个xml文件,包含了工程和各种配置细节的信息。必须包含project元素和三个必须的字段:groupId, artifactId,version。通过这三个标识在中央仓库中确定位置。
节点
描述

groupId
这是工程组的标识。它在一个组织或者项目中通常是唯一的。例如,一个银行组织 com.company.bank 拥有所有的和银行相关的项目。公司名或组织名

artifactId
这是工程的标识。它通常是工程的名称。例如,消费者银行。groupId 和 artifactId 一起定义了 artifact 在仓库中的位置。项目名或项目名-子项目名

version
这是工程的版本号。在 artifact 的仓库中,它用来区分不同的版本。例如: com.company.bank:consumer-banking:1.0 com.company.bank:consumer-banking:1.1.

查看 Super POM(父POM)默认配置的一个简单方法是执行以下命令:
mvn help:effective-pom

构建生命周期
Maven有三个标准的生命周期
clean:用于删除构建目录。
default(or build):有编译,测试,打包,部署等等操作都是在这个一个阶段进行。
site:一般用来创建新的报告文档、部署站点。
1.clean 包含以下阶段:
pre-clean
clean
post-clean

2.default(or build)有23中阶段:
生命周期阶段
描述

validate
检查工程配置是否正确,完成构建过程的所有必要信息是否能够获取到。

initialize
初始化构建状态,例如设置属性。

generate-sources
生成编译阶段需要包含的任何源码文件。

process-sources
处理源代码,例如,过滤任何值(filter any value)。

generate-resources
生成工程包中需要包含的资源文件。

process-resources
拷贝和处理资源文件到目的目录中,为打包阶段做准备。

compile
编译工程源码。

process-classes
处理编译生成的文件,例如 Java Class 字节码的加强和优化。

generate-test-sources
生成编译阶段需要包含的任何测试源代码。

process-test-sources
处理测试源代码,例如,过滤任何值(filter any values)。

test-compile
编译测试源代码到测试目的目录。

process-test-classes
处理测试代码文件编译后生成的文件。

test
使用适当的单元测试框架(例如JUnit)运行测试。

prepare-package
在真正打包之前,为准备打包执行任何必要的操作。

package
获取编译后的代码,并按照可发布的格式进行打包,例如 JAR、WAR 或者 EAR 文件。

pre-integration-test
在集成测试执行之前,执行所需的操作。例如,设置所需的环境变量。

integration-test
处理和部署必须的工程包到集成测试能够运行的环境中。

post-integration-test
在集成测试被执行后执行必要的操作。例如,清理环境。

verify
运行检查操作来验证工程包是有效的,并满足质量要求。

install
安装工程包到本地仓库中,该仓库可以作为本地其他工程的依赖。

deploy
拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程。

  1. site有以下阶段:
    pre-site
    site
    post-site
    site-deploy

构建配置文件
Profile 在 pom.xml 中使用 activeProfiles / profiles 元素指定,并且可以用很多方式触发。Profile 在构建时修改 POM,可以为不同的环境定制构建过程,比如开发环境,测试环境,产品环境。
Profile 主要有三种类型:
类型
在哪里定义

Per Project
定义在工程 POM 文件 pom.xml 中

Per User
定义在 Maven 设置 xml 文件中 (%USER_HOME%/.m2/settings.xml)

Global
定义在 Maven 全局配置 xml 文件中 (%M2_HOME%/conf/settings.xml)

Profile 有以下几种方式激活:
显式使用命令控制台输入
通过 maven 设置
基于环境变量(用户 / 系统变量)
操作系统配置(例如,Windows family)
现存 / 缺失 文件具体怎么激活还是需要项目实战才会有深刻的印象,这里就不具体描述了,不懂的话就去google

仓库
用来放置存储所有的工程 jar 文件、libraryjar文件、插件或任何其他的工程指定的文件。
本地仓库:本机上的文件夹。
中央仓库:由Maven社区管理,不需要配置,需要通过网络才能访问。
远程仓库:由开发人员自己定制的仓库。

Maven依赖搜寻顺序:
步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤4,如果找到了则下载到本地仓库中已被将来引用。
步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库已被将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

插件
执行插件的语法如下:
mvn [plugin-name]:[goal-name] ;插件名称:目标名称

插件是在 pom.xml 中使用 plugins 元素定义的。
每个插件可以有多个目标。
你可以定义阶段,插件会使用它的 phase元素开始处理。我们已经使用了 clean 阶段。
你可以通过绑定到插件的目标的方式来配置要执行的任务。我们已经绑定了 echo 任务到 maven-antrun-plugin 的 run 目标。
就是这样,Maven 将处理剩下的事情。它将下载本地仓库中获取不到的插件,并开始处理。插件我是这么理解的,就是感觉跟使用bash命令差不多。

依赖关系

1.传递性依赖
不用担心引入多余的依赖,Maven会解析各个直接依赖的POM,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中去。1. 路径最近者优先。2. 第一声明者优先,即顺序最靠前的那个依赖优先

2.排除依赖
声明exclusion的时候只需要groupId和artifactId即可,而不需要version元素,这是因为只需要groupId和artifactId就能唯一定位依赖图中的某个依赖。换句话说,Maven解析后的依赖中,不可能出现groupId和artifactId相同,但是version不同的两个依赖。

总结:
这个应该是在成熟的团队使用的。顺便了解下也是不错的。提高篇的传送门 以下是推荐类似功能的工具,思路都差不多。我错过了ant时代,我也错过了maven时代,但我不能错过gradle时代!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容