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

  1. 主版本:表示项目的重大变更,例如Maven1到Maven2,Struts1和Struts2
  2. 次版本:表示较大范围的功能增加和bug修复
  3. 增量版本:一般表示重大bug修复
  4. 里程碑版本:表示一个版本的里程碑

    但是注意:不是这个四个都必须有的,一般情况多会有主版本和次版本,增量和里程碑版本就不一定了。

packaging:项目打包类型(默认是jar),如果是纯粹管理其他子项目的父项目,这个类型需要为pom

3、Maven插件和目标

假如我们现在想通过如下命令来生成一个简单的maven项目

  1. 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个阶段

  1. pre-clean 执行一些清理前需要完成的工作。
  2. clean 清理上一次生成的字节码文件
  3. post-clean 执行一些清理后需要完成的工作

4.2 default:构建项目(重要)

default生命周期定义了真正构建时所需要执行的所有步骤,是最核心的部分。包含阶段如下

  1. validate
  2. initialize
  3. generate-sources
  4. process-sources 主力项目/src/main/resources目录下的资源文件
  5. generate-resources
  6. process-resources
  7. compile 编译项目src/main/java目录下的源代码
  8. process-classes
  9. generate-test-sources
  10. process-test-sources 处理项目src/test/resources目录下的测试资源文件
  11. generate-test-resources
  12. process-test-resources
  13. test-compile 编译项目src/test/java目录下的测试代码
  14. process-test-classes
  15. test 使用单元测试框架运行测试
  16. prepare-package
  17. package 接受编译好的代码,打包成可发布的格式jar,war
  18. pre-integration-test
  19. integration-test
  20. post-integration-test
  21. verify
  22. install 将包安装到Maven本地仓库,供本地其他Maven项目使用
  23. deploy 将最终的包复制到远程仓库中,供其他开发人员和Maven项目使用

4.3 site:建立项目站点

site生命周期是建立项目的发布站点,一般开发人员用不到。也就是生成一些站点信息

  1. pre-site 执行生成站点之前需要完成的工作
  2. site 生成项目站点文档
  3. post-site 执行生成站点之后需要完成的工作
  4. site-deploy 将生成的项目站点发布到服务器上

直接使用mvn site命令即可生成一个站点报告。

从命令行执行生命周期的某些阶段,例如:

mvn clean :调用clean生命周期的clean阶段,因为有依赖关系,所以实际上是先执行了pre-clean然后才执行的clean阶段

mvn test :调用default生命周期的test阶段,执行test阶段之前就必须执行test之前的那些阶段validate、initialize等等

Maven入门-2.Maven一些核心概念介绍的更多相关文章

  1. Maven入门-5.Maven的聚合和继承

    1.Maven的聚合1.1 聚合的配置2.Maven的继承2.1 可被继承的POM元素2.2 POM中使用继承2.3 继承dependency 1.Maven的聚合 在Maven入门-4.Maven的 ...

  2. Apache Maven的入门使用之常用操作以及核心概念介绍(2)

    我们接着上篇文章,来继续介绍Maven中几个核心的概念: POM (Project Object Model) Maven 插件 Maven 生命周期 Maven 依赖管理 Maven 库 POM ( ...

  3. Maven入门:Maven的基本概念

    本文转自:http://www.tianmaying.com/tutorial/maven-basic 看这篇文章之前,你应该先Run起来一个简单的Maven项目,先有个感性认识,然后再来听听对这些基 ...

  4. ElasticSearch入门及核心概念介绍

      Elasticsearch研究有一段时间了,现特将Elasticsearch相关核心知识和原理以初学者的角度记录下来,如有不当,烦请指正! 0. 带着问题上路——ES是如何产生的? (1)思考:大 ...

  5. Docker入门——理解Docker的核心概念

    1 前言 相信不少人听过这么一句话: 人类的本质是复读机. 在软件开发领域也一样,我们总是想寻找更好地方式复制优秀的逻辑或系统.最核心的方法是抽取通用逻辑和组件,把差异化的东西接口化或配置化,达到复用 ...

  6. Maven入门,Maven项目的创建,nexus 2.x搭建私服以及Maven多模块项目创建

    maven的了解做一个总结,以便日后查阅, 若有不足之处,还望指出,学无止境 当然也能起到入门效果. 一,搭建maven私服 1.工具 a. Nexus 2.5.1-01 b. Maven 3.3.9 ...

  7. Maven 入门——认识 Maven

    Maven /ˈmāvən/ ,可以翻译成"专家",是一款来自 Apache 组织的开源项目,用于项目管理.主要服务于基于 Java 平台的项目构建.依赖管理和项目信息管理. 构建 ...

  8. Maven入门-4.Maven的依赖

    1.Maven的依赖1.1 添加依赖1.2 依赖范围(sope)依赖范围与classpath的关系1.3 依赖的传递性1.2.1 依赖传递性的冲突问题1. 第一种情况2. 第二种情况1.2.2 通过e ...

  9. webpack的四个核心概念介绍

    前言 webpack 是一个当下最流行的前端资源的模块打包器.当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后 ...

随机推荐

  1. laravel 环境配置

    一.composer 安装 1.确定为最新版本的PHP 2.进入Composer官网下载页面,在页面最下方Manual Download区域选择需要的版本下载. 3.将下载的composer.phar ...

  2. RedisTemplate访问Redis数据结构

    https://www.jianshu.com/p/7bf5dc61ca06 Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字 ...

  3. 本地多张图片采用jmeter上传到ftp服务器的方法和获取服务器日志中某些关键字的基本方法

    测试需求: 本地图片上传到ftp服务器里和另外两台不同算法比对服务器进行比对,得出漏检和误检结果:这实际属于功能测试范畴. 测试思路: 第一种方法:使用实际场景的摄像机抓拍图片上传到服务器,用录屏软件 ...

  4. Linux查看本机登陆用户信息(w、who、last和lastlog命令)

    w 命令 查看 Linux 服务器上目前已经登录的用户信息 [root@localhost ~]# w :: up :, users, load average:0.00, 0.00, 0.00 US ...

  5. CF1153E Serval and Snake(交互题)

    题目 CF1153E Serval and Snake 很有意思的一道交互题 做法 我们观察到,每次查询一行,当这一行仅包含一端是返回的答案是奇数 根据这个性质查询每一行每一列,我们大体能知道两端的位 ...

  6. [BZOJ4566][HAOI2016]找相同子串

    COGS传送门 用SAM重新写了一遍.. 我的方法比较笨,先把两个串连在一起,算出来相同子串个数,同理算出s1和s2的子串个数.作差即可. 至于如何统计子串个数,首先toposort后搞出right集 ...

  7. 20145301Java课程总结

    20145301 Java课程总结 每周读书笔记链接汇总 第一周读书笔记: http://www.cnblogs.com/5301z/p/5248888.html 第二周读书笔记: http://ww ...

  8. 20145211《网络渗透》msf辅助模块的应用

    20145211<网络渗透>msf辅助模块的应用 一.实验准备 启用VB的kali,需要用到桥接,VMware桥接总是罢工…… 二.实验步骤 最好开桥接模式,要不然你就多开几个虚拟机(只要 ...

  9. poj-2259 team queue(数据结构)

    第一遍看的时候立即想到了哈希表. 再想时觉得两个队列,一个用来排队伍之间的顺序,一个用来排队伍内部成员的顺序即足够了. DEQUE的时候先判断哪只队伍排在队首,之后再让该队伍中的首队员出列. 整体没有 ...

  10. Python学习札记(五) Basic2 字符串和编码

    参考:字符串和编码 Note A.字符编码 1.计算机处理文本 == 将文本转换为二进制 => 处理 2.8 bit(比特) = 1 byte(字节) 一个字节所能表示的最大的十进制整数是255 ...