带你深度解析Maven
一、What`s Maven?
Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具,简单的说就是用来管理项目所需要的依赖且管理项目构建的工具。
二、Maven的优势
1. 约定优于配置
2. 简单
3. 测试支持
4. 构建简单
5. CI集成
6. 插件丰富
三、Maven的安装、配置
1. 在官网下载安装包:http://maven.apache.org/download.cgi
2. 解压缩压缩包
3. 配置环境变量MAVEN_HOME=maven的解压后的目录
4. 在变量Path的开头增加"%MAVEN_HOME%\bin;"
5. 在MAVEN_HOME/conf/setting.xml文件中通过<localRepository></localRepository>标签配置本地仓库的位置
注 :超级pom.xml的位置:MAVEN_HOME/lib/maven-model-build-3.3.9.jar/org/apache/maven/model/pom-4.0.0.xml
四、Maven的使用
1. 输出本地安装的maven的相关信息
mvn -version
2. 在IDEA中配置使用本地安装的maven
打开: File-->Settings, 然后按照下图操作
3. 控制台使用maven命令,配置文件加载顺序
1) ~/.m2/setting.xml
2) MAVEN_HOME/conf/setting.xml
五、配置Maven镜像加快依赖下载速度
<mirrors><mirror><id>aliyun_cental</id><name>aliyun_cental</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror><mirror><id>uk</id><mirrorOf>central</mirrorOf><name>Human Readable Name for this Mirror.</name><url>http://uk.maven.org/maven2</url></mirror><mirror><id>osc</id><name>Human Readable Name for this Mirror</name><url>http://maven.oschina.net:/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror><mirror><id>osc_thirdparty</id><mirrorOf>thirdparty</mirrorOf><url>http://maven.oschina.net/content/repositories/thirdparty/</url></mirror> </mirrors>
具体请移步另一篇博客:只用一招,让你Maven依赖下载速度快如闪电
六、认识Maven的结构
1. maven项目结构
src/main/java : 项目java类文件位置
src/main/resources : 项目配置资源文件位置
src/test/java : 项目单元测试java类文件位置
src/test/resources : 项目单元测试配置资源文件位置
target : 项目打包后文件所在位置
2. setting.xml元素解读: https://www.cnblogs.com/yangxia-test/p/4409736.html
3. pom.xml元素解读: http://www.cnblogs.com/hafiz/p/5360195.html
七、Maven的坐标、依赖
1. 坐标:maven通过groupId、artifactId、version三个变量来唯一确定一个具体的依赖(俗称GAV)
2. 依赖:在pom.xml中我们通过dependency来声明坐标信息(GAV)如:
<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.2.6.RELEASE</version> </dependency>
这样我们就在项目中依赖了4.2.6.RELEASE版本的spring-core jar包.
注 :pom.xml中packaging用来指定打包方式,默认为:jar
3. dependencyManagementy
1) 只能出现在父pom里
2) 统一版本号
3) 只是依赖声明,并不直接依赖,需要时在子项目中在声明要使用依赖的GA信息,V信息可以省略.
4. 依赖scope
1) compile:编译依赖范围,在编译,测试,运行时都需要,依赖范围默认值
2) test:测试依赖范围,测试时需要。编译和运行不需要,如junit
3) provided:已提供依赖范围,编译和测试时需要。运行时不需要,如servlet-api
4) runtime:运行时依赖范围,测试和运行时需要。编译不需要,例如面向接口编程,JDBC驱动实现jar
5) system:系统依赖范围。本地依赖,不在maven中央仓库,结合systemPath标签使用
5. 依赖传递时仲裁原则
1) 路径最短原则
2) 路径一样长,加载先后原则
注 : 第一列表示直接依赖的scope,第一行表示间接依赖的scope
6. 依赖排除
使用<exclusions>标签下的<exclusion>标签指定GA信息来排除,例如:排除xxx.jar传递依赖过来的yyy.jar
<dependency><groupId>com.xxx</groupId><artifactId>xxx</artifactId><version>x.version</version><exclusions><exclusion><groupId>com.xxx</groupId><artifactId>yyy</artifactId></exclusion></exclusions> </dependency>
7. 依赖关系查看
进入工程根目录,在cmd中运行
1) mvn dependency:tree
命令会列出依赖关系树及各级依赖关系
2) mvn dependency:analyze
分析依赖关系
八、版本管理
尽量使用语义化版本,方便团队协作,后面我们专门写一篇文章来说语义化版本。
Maven中的版本号中带SNAPSHOT和不带的区别以及作用请移步:Maven版本号中隐藏的惊天大秘密
九、生命周期、插件
1. 生命周期
A build lifecycle is made up of phases.
A build phases is made up of plugin goals.
1) clean(按顺序分别包括:pre-clean 、clean 、post-clean)
2) default(compile、package、install、deploy ...)
3) site(又包括:pre-site、site、post-site、site-deploy)
2. 插件
请移步另一篇文章:
十、自定义手写Maven的项目骨架
请移步另外一篇文章:手写Maven的archetype项目脚手架
十一、总结
通过本文,我们就对maven有了一个直观深入的了解和学习,通过maven我们可以进行自己的定制和开发。这是工程化的第一步,我们继续加油,下一步解析Git和Jenkins.
转载于:https://www.cnblogs.com/hafiz/p/8119964.html
带你深度解析Maven相关推荐
- 一文带你深度解析腾讯云直播答题方案
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 作者:腾讯视频云 进入2018年最火的新鲜事物无疑就是"直播答题"了,动辄上百万的奖金更是吸引了大量用户的参与.一场直播动辄 ...
- 图文并茂——从Kubernetes的诞生背景到什么是Kubernetes, 带你深度解析Kubernetes
在云原生技术发展的浪潮之中,Kubernetes作为容器编排领域的事实标准和云原生领域的关键项目,其诞生与完善有着对应的技术历史背景,了解这个过程,对于系统的理解Kubernetes的核心思想.架构设 ...
- K8s项目实战笔记 图文并茂带你深度解析Kubernetes
一.前言 Kubernetes(简称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化部署.自动扩缩容.维护等功能.它既是一款容器编排工具,也是全新的基于容器技术的分布式架构领先方案.在Doc ...
- 2021了还有必要发外链吗-带你深度解析外链对SEO的帮助
首先,外链主要的作用是给我们的网站传递蜘蛛,导入权重,让我们网站的关键词排名更加稳定,收录的更快,等等各种好处. 如果一个网站有很多人分享的文章,搜索引擎会认为这个网站很有价值,并且认为这个网站可以为 ...
- 带你深度解析虚幻引擎4的照明和阴影知识
照明是渲染的重要组成部分.有静态光和动态光,它们往往很重并且需要大量计算.今天就让赞奇云工作站带领小伙伴们来学习一下虚幻引擎4中的光照和阴影的知识. 静态照明 静态光在编辑器中预先计算并保存在光照贴图 ...
- 阿里P8架构师力荐K8s项目实战笔记 图文并茂带你深度解析Kubernetes
一.前言 Kubernetes(简称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化部署.自动扩缩容.维护等功能.它既是一款容器编排工具,也是全新的基于容器技术的分布式架构领先方案.在Doc ...
- 计算机组装时应该注意的硬件参数,深度解析组装一台计算机需要注意的兼容性问题...
如果你准备组装一台计算机,那你必然是需要一定的计算机硬件知识,首先应该考虑的当然是配置,不过很多菜鸟在DIY的时候都会忽视硬件的兼容性问题,如果硬件不兼容,操作系统就可能经常死机,甚至无法开机等问题, ...
- 干货|深度解析配合叉车设备使用提高仓库容量利用率的防腐搁板式货架
随着我国经济的不断发展,企业对于物流仓储了解的越深,对搁板式货架的需求也与日俱增!一提到搁板式货架,我们通常是感觉都以为这是轻型货架,适合存放重量较轻的货物,实际上并非都是如此.不同的搁板式货架,它的 ...
- 打卡学习Gradle深度解析 - kts脚本加载流程
kts脚本加载流程 和groovy脚本一样,kts脚本也分为2个阶段 stage 1 执行buildscript和plugins部分,执行结果会对stage2 program的classpath有影响 ...
最新文章
- Compute API 关键概念 详解
- 介绍importlib
- IDEA中注解注释快捷键及模板
- (09)VHDL例化VHDL
- subversion使用_使用Subversion在SQL数据库中对象更改的修订历史记录
- 20200604每日一句
- 甘特图控件VARCHART XGantt如何开始使用
- 扩展内存条 兼容性问题 双通道
- 视频黑屏画面检测 blackframe
- hashcat工具的使用----再也不用担心自己的word等文件的密码忘记啦!
- A STRIP OF LAND POJ - 1156 (单调队列)
- ItextAsian中文字体
- nargin 和 nargout
- MPB:原核微生物群落随机性和确定性装配过程的计算方法
- 从满腹经纶到入行小白:理论学习与实际应用的差距
- 多机局域网办公神器 rustdesk 使用强推!!!
- 从股票市场选择配对的股票:共同趋势模型与套利定价理论
- vue首次加载生命周期
- DL4J解决Score NaN
- 用DAB格式快速制作易读宝BNL点读包