maven(一) 基础知识
文章目录
- 1. maven介绍
- 2. maven生命周期
- 3. snapshot版本和release版本的区别
- 4. maven仓库
- 5. plugin插件
- 6.maven命令
- 7. 继承和聚合
1. maven介绍
Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 下载地址:http://maven.apache.org/download.cgi
maven的安装依赖于java环境,需要先安装java环境。
2. maven生命周期
maven有三个标准的生命周期:
- clean:项目清理的处理
- default(或 build):项目部署的处理
- site:项目站点文档创建的处理
每一个生命周期由许多阶段(phase)组成,如build生命周期主要有validate compile test package install deploy。
注意:
- 当一个阶段通过 Maven 命令调用时,例如 mvn package ,只有该阶段之前以及包括该阶段在内的所有阶段会被执行。
- 生命周期是相互独立的。如package是不包含clean的。
3. snapshot版本和release版本的区别
snapshot快照是一种特殊的版本,指定了某个当前的开发进度的副本。不同于常规的版本,Maven 每次构建都会在远程仓库中检查新的快照,Snapshot 版本代表不稳定、尚处于开发中的版本,Release 版本则代表稳定的版本。
什么情况下该用 SNAPSHOT?
协同开发时,如果 A 依赖构件 B,由于 B 会更新,B 应该使用 SNAPSHOT 来标识自己。这种做法的必要性可以反证如下:
a. 如果 B 不用 SNAPSHOT,而是每次更新后都使用一个稳定的版本,那版本号就会升得太快,每天一升甚至每个小时一升,这就是对版本号的滥用。
b.如果 B 不用 SNAPSHOT, 但一直使用一个单一的 Release 版本号,那当 B 更新后,A 可能并不会接收到更新。因为 A 所使用的 repository 一般不会频繁更新 release 版本的缓存(即本地 repository),所以B以不换版本号的方式更新后,A在拿B时发现本地已有这个版本,就不会去远程Repository下载最新的 B
不用 Release 版本,在所有地方都用 SNAPSHOT 版本行不行?
不行。正式环境中不得使用 snapshot 版本的库。 比如说,今天你依赖某个 snapshot 版本的第三方库成功构建了自己的应用,明天再构建时可能就会失败,因为今晚第三方可能已经更新了它的 snapshot 库。你再次构建时,Maven 会去远程 repository 下载 snapshot 的最新版本,你构建时用的库就是新的 jar 文件了,这时正确性就很难保证了。
4. maven仓库
Maven 仓库有三种类型:
- 本地(local)
- 中央(central)
- 远程(remote)
本地仓库
Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。运行 Maven 的时候,Maven 所需要的任何构件都是直接从本地仓库获取的。如果本地仓库没有,它会首先尝试从远程仓库下载构件至本地仓库,然后再使用本地仓库的构件。
默认情况下,不管Linux还是 Windows,每个用户在自己的用户目录下都有一个路径名为 .m2/respository/ 的仓库目录。Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"><localRepository>C:/MyLocalRepository</localRepository>
</settings>
中央仓库镜像
Maven 仓库默认在国外, 国内使用难免很慢,我们可以更换为阿里云的仓库。
方法很简单,修改 maven 根目录下的 conf 文件夹中的 setting.xml 文件,在 mirrors 节点上,添加内容如下:
<mirrors><mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf> </mirror>
</mirrors>
5. plugin插件
插件是maven的核心,所有的功能都有插件来提供。每个插件都有多个目标goal,每个goal是对插件功能的细分。
注意,插件的运行是需要绑定到生命周期的某一个阶段的。
6.maven命令
maven的命令有两种,一种是插件命令;一种是生命周期命令,他是maven为我们集成好的,多个插件命令的有序集合(也照应maven的功能都是由插件提供的),如mvn test , mvn package等等,方便很常用。
7. 继承和聚合
- 依赖的范围
compile | test | provided | |
---|---|---|---|
编译 | √ | 不可以 | √ |
测试 | √ | √ | √ |
运行 | √ | 不可以 | 不可以 |
举例 | 依赖默认范围 | junit | servlet-api |
依赖原则:
1.路径最短优先原则。如果本工程就有,肯定用本工程的。
2.路径相同时:
如果在同一个pom文件中有两个相同的依赖(版本不同),后声明的会覆盖先声明的。但这种用法肯定是错误的。
如果在不同的pom文件,则依赖先声明的。即A依赖于B和C,B和C中分别有d1和d2依赖,则因为A中先声明依赖的B,所以A依赖的为d1.
- 聚合
利用maven开发时工程一般是多模块,利用聚合我们可以将多个模块聚合在一起:
<!--包含的子模块--><modules><module>cloud-api</module><module>cloud-common</module><module>cloud-web</module><module>cloud-view</module></modules>
这样我们只需要对父工程进行打包,子模块也跟着被打包。maven在打包子模块时会自动安排顺序,即会先打包其他再打包实际的web工程。
注意聚合工程的<packaging>pom</packaging>
”,即必须为pom!
- 继承
继承主要是为了消除重复。父工程中除了artifactId和name,基本上所有的元素都可以被继承。父工程可以利用dependencyManagement来管理依赖版本。
聚合和继承在开发中经常作为同一个同时使用,但两者并无关系。聚合是为了方便同时打多个包,继承是为了消除重复。
maven(一) 基础知识相关推荐
- Maven (1)---maven 基础知识
Maven 学习 Maven 翻译为"专家"."内行",是 Apache 下的一个纯 Java 开发的开源项目.基于项目对象模型(缩写:POM)概念,Maven ...
- java培训基础知识都学哪些
很多人都开始学习java技术,觉得java语言在未来的发展前景空间非常大,事实却是如此,那么针对于零基础的同学, 学习java技术需要学哪些呢?下面我们就来看看java培训基础知识都学哪些? java ...
- java 网络爬虫 正则表达式_【干货】Java网络爬虫基础知识
原标题:[干货]Java网络爬虫基础知识 引言 Java 网络爬虫具有很好的扩展性可伸缩性,其是目前搜索引擎开发的重要组成部分.例如,著名的网络爬虫工具 Nutch 便是采用 Java 开发,该工具以 ...
- 后端技术:Maven 最全知识总结,值得收藏!
来源:cnblogs.com/hzg110/p/6936101.html 一.为什么使用Maven这样的构建工具[why] 二.maven是什么[what] 三.安装maven 四.第一个maven ...
- crawler4j_迷你搜索引擎–使用Neo4j,Crawler4j,Graphstream和Encog的基础知识
crawler4j 继续执行正在实现搜索引擎的Programming Collection Intelligence (PCI)的第4章. 我可能比做一次运动所咬的东西要多. 我认为,与其使用本书中所 ...
- 迷你搜索引擎–使用Neo4j,Crawler4j,Graphstream和Encog的基础知识
继续执行正在实现搜索引擎的Programming Collection Intelligence (PCI)的第4章. 我可能比做一次运动所咬的东西要多. 我认为, 与其一直使用本书中使用的普通关系数 ...
- mvc试图 下拉框不重复_面试前不巩固一下基础知识、刷刷题吗?
其实面试就像一场相亲,在你心动人的面前,肯定要展示自己最好的一面,无论是穿着还是言行举止.作为一个软件开发工程师,看过很多公司的面试题,也参与过很多公司的面试,也给不少人新人面过时不试,虽说我现在并没 ...
- 大数据?这些你了解吗?------之基础知识篇
下面介绍的这些是在Linux环境下学习大数据所必须要掌握的基础知识: 1.导入虚拟机 =>解压=>英文目录下=>导入VMware中[已移动]=>超级管理员用户root/123 ...
- Web前端基础知识整理
1. 前端基础知识 文件分类 XML(扩展标记语言) 装载有格式的数据信息,用于各个框架和技术的配置文件描述 特点: 扩展名为.xml 内容区分大小写 标签要成对出现,形成容器,只能有一个 标签按正确 ...
最新文章
- 考研加油!考研的兄弟姐妹们!
- c语言结构体反射解析,C语言结构体解析
- 需要某个字体包才能正确显示此页面_如何做设计,才能做好设计
- 网上找工作秘籍(3)
- (91)Verilog HDL系统函数和任务:$fopen
- ANR问题的log位置
- 36. LatencyTOP
- numpy简单快速安装教程
- 远程桌面连接(远程控制另一电脑)的详细步骤
- 10---OpenCV:图像进阶操作之连通区域分析
- Centos7升级OpenSSL 1.0.2k-fips
- nRF52832 BLE UART
- 使用arpspoof进行arp欺骗
- 戴尔 服务器重装后蓝屏,dell inspiron 5490重新安装win10 1903专业工作站版系统后开机频繁蓝屏...
- SAP中利用价格条件有效期条件重叠实现修改价格条件单位的需求实例分析测试
- DBTC——流动性、使用人数自我驱动增长的分叉币
- Jam 计数法 思路很清
- 敏捷项目管理21天学习计划--精益画布
- Switch-零基础完全上手指南(日版)
- 部分常见遥感指数(RSEI)原理与计算方法,以及效果比较
热门文章
- unity 批量导入模型工具_零基础的Unity图形学笔记3:使用多模型UV与优化模型导出...
- 简易mysql数据库调优_MySQL数据库简单实用的优化方法
- java对象的访问定位_JVM创建对象及访问定位过程详解
- java怎么给类中的私有变量赋值_Java核心技术笔记分享------第二章 类与对象
- 【推荐系统】基于物品的协同过滤算法
- 八十六、推荐组件的redux-thunk异步解决方案、Ajax获取推荐数据
- 计算机视觉中的自监督表示学习近期进展
- NLP免费直播 | 两周讲透图卷积神经网络、BERT、知识图谱、对话生成
- web第二节2020.5.11
- 多模态理论张德禄_结构动力学中的模态分析(3) —— 模态参数及实验模态分析...