Maven入门-2.Maven一些核心概念介绍
1、Maven仓库
当第一次使用Maven的时候,Maven会从远程仓库http://repo1.maven.org/maven2 下载所需要的jar包到你本地仓库
等下次再获取同样的jar包时,Maven会先从你本地仓库获取,如果本地仓库获取不到,则再从远程下载。
2、Maven坐标
Maven通过groupId, artifactId, version和packaging这四个元素定义了项目的坐标,一个坐标就是在Maven空间里的一个点,是不能重复的。它们用来唯一标识一个项目,一个依赖,一个插件
groupId:团体、公司、组织、小组这些名词的逆向命名。例:com.baidu.user
artifactId:定义了一个maven项目的一个模块,一般约定为项目名词作为前缀-模块。例:user-core 其中user为项目名,core为模块名
version:定义了当前这个项目的版本。
Maven的版本号约定:<主版本>.<次版本>.<增量版本>-<里程碑版本> 例如:1.3.4-beta-2
- 主版本:表示项目的重大变更,例如Maven1到Maven2,Struts1和Struts2
- 次版本:表示较大范围的功能增加和bug修复
- 增量版本:一般表示重大bug修复
- 里程碑版本:表示一个版本的里程碑
但是注意:不是这个四个都必须有的,一般情况多会有主版本和次版本,增量和里程碑版本就不一定了。
packaging:项目打包类型(默认是jar),如果是纯粹管理其他子项目的父项目,这个类型需要为pom
3、Maven插件和目标
假如我们现在想通过如下命令来生成一个简单的maven项目
mvn archetype:create -DgroupId=com.baidu.user -DartifactId=user-core -DpackageName=com.baidu.user
之前我们说过,Maven自身其实是没做什么实际的事情,一切都是由插件完成的。
像上面的mvn archetype:create 表示运行了archetype插件的create目标。一个插件是一个或多个目标的集合。如下图
一个目标才是一个明确的任务,才是maven执行的命令
其中,目标中定义了一些参数。例如上面命令中的-DgroupId表示参数名称为groupId,值为com.baidu.user
就Maven的本身来说,它并不知道怎么生成一个jar文件,它只是把这些操作代理给了插件完成。
插件目标速记符号:pluginId:goalId
4、Maven生命周期
Maven的生命周期中包含了一系列插件的目标操作,例如,我们运行一个mvn package命令,这个命令中并没有指定一个插件的目标,就只有一个package命令。
而这个package命令就是生命周期中的一个阶段,每个生命周期中都包含了一些阶段,这些阶段是有依赖关系的。阶段中运行了一系列插件中的目标操作。
在Maven中有三套独立的生命周期:
4.1 clean:清理项目
clean生命周期的目的就是清理项目,包含3个阶段
- pre-clean 执行一些清理前需要完成的工作。
- clean 清理上一次生成的字节码文件
- post-clean 执行一些清理后需要完成的工作
4.2 default:构建项目(重要)
default生命周期定义了真正构建时所需要执行的所有步骤,是最核心的部分。包含阶段如下
validate
initialize
generate-sources
process-sources 主力项目/src/main/resources目录下的资源文件
generate-resources
process-resources
compile 编译项目src/main/java目录下的源代码
process-classes
generate-test-sources
process-test-sources 处理项目src/test/resources目录下的测试资源文件
generate-test-resources
process-test-resources
test-compile 编译项目src/test/java目录下的测试代码
process-test-classes
test 使用单元测试框架运行测试
prepare-package
package 接受编译好的代码,打包成可发布的格式jar,war
pre-integration-test
integration-test
post-integration-test
verify
install 将包安装到Maven本地仓库,供本地其他Maven项目使用
deploy 将最终的包复制到远程仓库中,供其他开发人员和Maven项目使用
4.3 site:建立项目站点
site生命周期是建立项目的发布站点,一般开发人员用不到。也就是生成一些站点信息
- pre-site 执行生成站点之前需要完成的工作
- site 生成项目站点文档
- post-site 执行生成站点之后需要完成的工作
- site-deploy 将生成的项目站点发布到服务器上
直接使用mvn site命令即可生成一个站点报告。
从命令行执行生命周期的某些阶段,例如:
mvn clean :调用clean生命周期的clean阶段,因为有依赖关系,所以实际上是先执行了pre-clean然后才执行的clean阶段
mvn test :调用default生命周期的test阶段,执行test阶段之前就必须执行test之前的那些阶段validate、initialize等等
Maven入门-2.Maven一些核心概念介绍的更多相关文章
- Maven入门-5.Maven的聚合和继承
1.Maven的聚合1.1 聚合的配置2.Maven的继承2.1 可被继承的POM元素2.2 POM中使用继承2.3 继承dependency 1.Maven的聚合 在Maven入门-4.Maven的 ...
- Apache Maven的入门使用之常用操作以及核心概念介绍(2)
我们接着上篇文章,来继续介绍Maven中几个核心的概念: POM (Project Object Model) Maven 插件 Maven 生命周期 Maven 依赖管理 Maven 库 POM ( ...
- Maven入门:Maven的基本概念
本文转自:http://www.tianmaying.com/tutorial/maven-basic 看这篇文章之前,你应该先Run起来一个简单的Maven项目,先有个感性认识,然后再来听听对这些基 ...
- ElasticSearch入门及核心概念介绍
Elasticsearch研究有一段时间了,现特将Elasticsearch相关核心知识和原理以初学者的角度记录下来,如有不当,烦请指正! 0. 带着问题上路——ES是如何产生的? (1)思考:大 ...
- Docker入门——理解Docker的核心概念
1 前言 相信不少人听过这么一句话: 人类的本质是复读机. 在软件开发领域也一样,我们总是想寻找更好地方式复制优秀的逻辑或系统.最核心的方法是抽取通用逻辑和组件,把差异化的东西接口化或配置化,达到复用 ...
- Maven入门,Maven项目的创建,nexus 2.x搭建私服以及Maven多模块项目创建
maven的了解做一个总结,以便日后查阅, 若有不足之处,还望指出,学无止境 当然也能起到入门效果. 一,搭建maven私服 1.工具 a. Nexus 2.5.1-01 b. Maven 3.3.9 ...
- Maven 入门——认识 Maven
Maven /ˈmāvən/ ,可以翻译成"专家",是一款来自 Apache 组织的开源项目,用于项目管理.主要服务于基于 Java 平台的项目构建.依赖管理和项目信息管理. 构建 ...
- Maven入门-4.Maven的依赖
1.Maven的依赖1.1 添加依赖1.2 依赖范围(sope)依赖范围与classpath的关系1.3 依赖的传递性1.2.1 依赖传递性的冲突问题1. 第一种情况2. 第二种情况1.2.2 通过e ...
- webpack的四个核心概念介绍
前言 webpack 是一个当下最流行的前端资源的模块打包器.当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后 ...
随机推荐
- eclipse中Web Deployment Assembly与build path作用
java Build path是编译路径设置,主要用来设置源代码的编译路径默认是default output folder Web Deployment Assembly是eclipse中的发布路径设 ...
- [转]HTML标签元素的分类
在讲解CSS布局之前,我们需要提前知道一些知识,在CSS中,html中的标签元素大体被分为三种不同的类型:块状元素.内联元素和内联块状元素. 常用的块状元素有: <div>.<p ...
- RabbitMQ学习之(一)_初步了解RabbitMQ、RabbitMQ的使用流程、为什么要使用RabbitMQ、RabbitMQ的应用场景
初识RabbitMQ RabbitMQ是一个在AMQP协议基础上实现的消息队列系统, 是一个消息代理.它的核心原理非常简单:接收和发送消息.你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件 ...
- MAC VNC SSH roo用户开通
第一步:ssh: user@xxx.xxx.xxx 第二步:开启VNC 开启VNC共享桌面: sudo /System/Library/CoreServices/RemoteManagement/A ...
- 动态 K th
每一棵线段树是维护每一个序列前缀的值在任意区间的个数,如果还是按照静态的来做的话,那么每一次修改都要遍历O(n)棵树,时间就是O(2*M*nlogn)->TLE考虑到前缀和,我们通过树状数组来优 ...
- node实现rar格式压缩
背景 由于公司的CMS系统里,只接受rar格式压缩的文件,所以没法直接使用nodejs里提供的zip压缩组件.只能从winRar软件入手了,但网上没有多少这方面相关的东西,所以下面也是自己尝试着在做. ...
- ubuntu 16.04 gtx1060 显卡安装【转】
本文转载自:https://blog.csdn.net/u010925447/article/details/79754044 版权声明:本文为博主原创文章,未经博主允许不得转载. https://b ...
- 在.Net中进行SQL Server数据库备份与还原操作实用类
#region 类说明 //----------------------------------------------------------------------------- // // 项目 ...
- Oracle函数中文转拼音(首字母)
CREATE OR REPLACE FUNCTION FUN_GET_PYCODE(p_str IN VARCHAR2, p_flag NUMBER DEFAULT NULL) RETURN VARC ...
- git tags 管理
新建标签: git tag -a V1.1 -m "some thing" (新建标签前请先commit代码) 推送标签: git push --tags (推送标签前请先推送代码 ...