Maven学习总结——理解maven的核心概念
来源:互联网 发布:java获取上月第一天 编辑:程序博客网 时间:2024/05/01 22:32
好久没进行java方面的开发了,最近又完成了一个java相关的任务,顺便重新体会了 maven 这一利器。
在使用过程中发现以前对maven的理解不够深入,借此机会重新梳理了一下maven的核心概念。相信理解了这些核心概念, 即使长时间不使用,以后再重新上手也会非常容易。
本文以类图的方式,介绍maven核心的12个概念以及相互之间的关系。
Table of Contents
- 1 maven管理的目标:工程(Project)
- 1.1 工程依赖关系
- 1.2 工程聚合关系
- 2 maven的核心:生命周期和阶段
- 3 功能实现:插件和Goal
- 4 仓库(Repository)
- 5 小结
1 maven管理的目标:工程(Project)
maven是一个软件工程(Software Project)管理工具。 对于maven来说,一个软件工程的唯一标识是由开发者(groupId)、生成物(artifactId)、版本(version) 共同决定的。
每个工程都有一个打包类型,可以是jar, war, ear 或 pom。打包类型决定了工程最终产物的类型。 其中pom类型用于构件多模块工程。
工程之间有两种关系:依赖和聚合。
1.1 工程依赖关系
依赖关系的管理是maven最为人称道的地方。一个工程可以依赖多个其他工程, 通过工程的唯一标识(groupId+artifactId+version)可以明确指明依赖的库及版本,而且能够处理 依赖关系的传递。 maven可以指定依赖的作用范围(scope),包括以下几种:
由于依赖关系的传递性可能会导致依赖的版本、scope等发生冲突,maven提供了仲裁机制,同时也 允许自己通过配置进行依赖管理。
1.2 工程聚合关系
前面提到pom类型用于于构件多模块工程,这体现了project之间的一种聚合关系: 将一系列小的模块聚合成整个产品。
通过聚合后的工程可以同时管理每个相关模块的构建、清理、文档等工作。 聚合关系通过在子工程中指定一个pom类型的project作为父project来定义。
2 maven的核心:生命周期和阶段
maven将工程(Project)的构建过程理解为不同的生命周期(LifeCycle)和阶段(Phase)。 在工程的构建过程中,存在着不同的生命周期,这些生命周期互相独立,之间也没有一定的顺序关系。 每个生命周期又划分为不同的阶段(Phase)。阶段之间有明确的顺序关系, 同一生命周期内的阶段必须按顺序依次执行。
maven内置了三个生命周期,并为每个生命周期内置了一些阶段。 下面列举出maven内置的生命周期及主要的阶段:
- default:构建(Build)
- validate:验证项目是否正确,所有必需的信息是否可用。
- compile:编译项目中的代码。
- test:用相关的单元测试框架测试编译后的代码,这些运行的测试并不会随项目打包和布署。
- package:将编译后的代码打包成相应的格式文件,如jar包。
- integration-test: 如果需要在一个综合环境中运行我们的测试,这个阶段将会运行和布署项目到该环境中。
- verify: 检查项目的包是否正确和符合要求。
- install:将包安装到本地maven仓库,可以让其他项目作为依赖使用该包。
- deploy:将包发布到远程的maven仓库,并提供给其他开发者使用。
- clean:清理
- pre-clean 准备清理
- clean 执行清理工作
- post-clean 执行清理后的后续工作
- site:生成项目文档和站点
- pre-site 准备生成
- site 生成项目站点和文档
- post-site 执行生成文档后的后续工作
- site-deploy 发布项目文档
更详细的phase说明参考: http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference
3 功能实现:插件和Goal
Maven中定义的工程周期和阶段只是抽象的概念,不涉及具体的功能。 具体的功能由插件(Plugin)实现。一个插件可以实现多个目标(Goal)。
为了解耦插件的功能和工程阶段,实现高度的可配置性,maven规定插件只是实现目标的功能, 通过配置来决定在哪个阶段执行(Execution)哪些目标操作。 甚至可以把一个Goal绑定到多个Phase,以实现复用。
maven内置了一些默认的插件,并根据不同的工程packing类型在各个phase中默认绑定了一些goal。 下表中列出default生命周期中各阶段默认绑定的goal,其中goal按照管理使用pluginname:goalname的方式标记:
最后需要说明的是,maven的插件是一种packaging类型为maven-plugin的project, 可以使用maven project的依赖,配置插件等等一切特性。
4 仓库(Repository)
仓库主要用于获取工程依赖的其他工程的生成物,也可用来部署(deploy)maven工程的生成物。 生成物包括各种打包的生成物以及pom文件。
如果有必要,一个工程可以部署到多个仓库。
仓库可以分为本地库(local)和远程库(remote)。本地库通常位于本机的~/.m2/repository文件夹, 远程库最常见的是maven中央库(),此外也会有一些私服库用于企业内部。
http://repository.jboss.com/maven2/
5 小结
本文梳理了maven的核心概念,整个maven核心概念的全貌如下:
- Maven学习总结——理解maven的核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(四)——Maven核心概念
- maven 学习总结(四)——Maven核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(4)——Maven核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(4)——Maven核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(五)——Maven核心概念
- Maven学习总结(四)——Maven核心概念
- Maven学习总结(21)——Maven常用的几个核心概念
- Maven学习总结(17)——Maven常用的几个核心概念
- 评估目标之RMSE,MAP,NDCG
- PHP-成功配置imagick
- python问题请教:大佬们 AttributeError: 'int' object has no attribute 'save_bullet'
- codis集群部署实战
- ITIL运维服务管理的26个流程的密切关系说明
- Maven学习总结——理解maven的核心概念
- 《bt5从入门到精通》读书摘要
- PendingIntent使用填坑记
- 【安全牛学习笔记】tcpdump简介及常用命令实例
- idea--3.maven配置
- linux中man命令的用法
- c作业(补)
- Android studio更改版本studio的gradle
- 2006年培养学员8万人,每年增长25%,请问按照次增长速度,到哪一年培养学员人数将达到20万人?(分别用while do while 和 for语句作答)