Maven - Maven3实战学习笔记(2)坐标和依赖
1、maven坐标元素
maven坐标元素包括:groupId、artifactId、version、packaging、classifier。
classifier:定义输出的附属构件。groupId、artifactId、version是pom.xml中必须定义的,packaging是可选的,classifier是不能直接定义的。
2、dependency中的元素
<dependencies><dependency><groupId>...</groupId><artifactId>...</artifactId><version>...</version><type>...</type><scope>...</scope><optional>...</optional><exclusions><exclusion>...</exclusion></exclusions></dependency> </dependencies>
说明:type:依赖的类型,对应项目坐标定义的packaging。scope:依赖的范围。optional:标记依赖是否可选。exclusions:用来排除传递性依赖。
classpath类型:编译时classpath、测试时classpath、运行时classpath。
3、scope依赖范围:compile、test、provided、runtime、system、import
1》compile:编译依赖范围。默认的依赖范围。对编译、测试、运行的classpath都有效。
2》test:测试依赖范围。只对测试classpath有效,编译主代码、运行项目的使用时无法使用此类依赖。编译测试代码、运行测试的时候可以使用。
3》procided:已提供依赖范围。对于编译和测试classpath有效,但在运行时无效。举例servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要maven重复的引入一遍。
4》runtime:运行时依赖范围。对于测试和运行有效,但在编译主代码时无效。举例jdbc驱动,项目主代码编译只需要jdk提供的jdbc接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体jdbc驱动。
5》system:系统依赖范围。该依赖与3种classpath的关系,和provided依赖范围完全一致。但是,使用system的依赖时必须通过systempath元素显式的指定依赖文件的路径。由于此类依赖不是通过maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植性。systempath元素可以引用环境变量,如:
<dependencies><dependency>...<scope>system</scope><systemPath>{java.home}/lib/rt.jar</systemPath>...</dependency> </dependencies>
6》import(maven2.0.9及以上):导入依赖范围。该依赖范围不会对3种classpath产生实际的影响。
4、传递性依赖
1》传递性依赖:A包依赖于B包,B包又依赖于C包,则A包传递性的依赖于C包。如account-email有一个compile范围的依赖spring-core,spring-core有一个compile范围的commons-logging的依赖,那么commons-logging就会成为account-email的compile范围依赖,commons-logging是account-email的一个传递依赖。
2》传递性依赖和依赖范围:依赖范围不仅可以控制依赖与3种classpath的关系,还对传递性依赖产生影响。如上面的account-email对于commons-logging这一传递性依赖的范围也就是compile。A依赖于B,B依赖于C,我们就说A对于B是第一直接依赖,B对于C是第二直接依赖,A对于C是传递性依赖。第一直接依赖的范围和第二直接依赖的范围决定了传递性依赖的范围。(如图:中间交叉范围为传递性依赖的范围)
第一直接依赖范围\第二直接依赖范围 | compile | test | provided | runtime |
compile | compile | - | - | runtime |
test | test | - | - | test |
provided | provided | - | provided | provided |
runtime | runtime | - | - | runtime |
3》依赖调解:
1>依赖调解第一原则:路径最近者优先
例如:A->B->C->X(1.0)、A->D->X(2.0),X(1.0)版本的路径长度为3,X(2.0)的路径长度为2,因此X(2.0)版本会被解析使用。
2>依赖调解第二原则:在路径相等的情况下,第一声明者优先,在pom中依赖声明的顺序决定了谁会被解析使用。
例如:A->B->Y(1.0)、A->C->Y(2.0),如果B的依赖声明在C之前,那么Y(1.0)就会被解析使用。
4》可选依赖
5》排除依赖
6》归类依赖
7》优化依赖
#maven自动解析项目的直接依赖、传递性依赖、调解依赖冲突、确保依赖中 #只有唯一版本的依赖存在,得到的依赖称为已解析依赖。 #可以使用如下语句查看项目已解析依赖: mvn dependency:list
C:\fyliu\lfyTemp\mvnProject\mvn-archetype-generate\hello-world>mvn dependency:li st [INFO] Scanning for projects... [INFO] [INFO] --------------------< com.lfy.mvnbook:hello-world >--------------------- [INFO] Building hello-world 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-dependency-plugin:2.8:list (default-cli) @ hello-world --- [INFO] [INFO] The following files have been resolved: [INFO] junit:junit:jar:4.11:test [INFO] org.hamcrest:hamcrest-core:jar:1.3:test [INFO] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.593 s [INFO] Finished at: 2019-09-15T15:56:14+08:00 [INFO] ------------------------------------------------------------------------C:\fyliu\lfyTemp\mvnProject\mvn-archetype-generate\hello-world>
#查看项目的依赖树 mvn dependency:tree
C:\fyliu\lfyTemp\mvnProject\mvn-archetype-generate\hello-world>mvn dependency:tr ee [INFO] Scanning for projects... [INFO] [INFO] --------------------< com.lfy.mvnbook:hello-world >--------------------- [INFO] Building hello-world 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ hello-world --- [INFO] com.lfy.mvnbook:hello-world:jar:1.0-SNAPSHOT [INFO] \- junit:junit:jar:4.11:test [INFO] \- org.hamcrest:hamcrest-core:jar:1.3:test [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.144 s [INFO] Finished at: 2019-09-15T15:58:14+08:00 [INFO] ------------------------------------------------------------------------C:\fyliu\lfyTemp\mvnProject\mvn-archetype-generate\hello-world>
#分析依赖,可以找出被隐式引用但是没有明确声明的依赖#Unused declared dependencies found 指没有使用但是声明了的依赖,不一定完全正确#Used declared dependencies 指项目中使用但没有显式声明的依赖mvn dependency:analyze
C:\fyliu\lfyTemp\mvnProject\mvn-archetype-generate\hello-world>mvn dependency:an alyze [INFO] Scanning for projects... [INFO] [INFO] --------------------< com.lfy.mvnbook:hello-world >--------------------- [INFO] Building hello-world 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] >>> maven-dependency-plugin:2.8:analyze (default-cli) > test-compile @ he llo-world >>> [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ hello-worl d --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory C:\fyliu\lfyTemp\mvnProject\mvn-arche type-generate\hello-world\src\main\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ hello-world ---[INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ he llo-world --- [INFO] Using 'UTF-8' encoding to copy filtered resources. [INFO] skip non existing resourceDirectory C:\fyliu\lfyTemp\mvnProject\mvn-arche type-generate\hello-world\src\test\resources [INFO] [INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ hello-w orld --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] <<< maven-dependency-plugin:2.8:analyze (default-cli) < test-compile @ he llo-world <<< [INFO] [INFO] [INFO] --- maven-dependency-plugin:2.8:analyze (default-cli) @ hello-world --- [WARNING] Unused declared dependencies found: [WARNING] org.springframework:spring-core:jar:2.5.6:compile [WARNING] org.springframework:spring-beans:jar:2.5.6:compile [WARNING] org.springframework:spring-context-support:jar:2.5.6:compile [WARNING] javax.mail:mail:jar:1.4.1:compile [WARNING] com.icegreen:greenmail:jar:1.3.1b:test [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 6.885 s [INFO] Finished at: 2019-09-15T16:14:52+08:00 [INFO] ------------------------------------------------------------------------C:\fyliu\lfyTemp\mvnProject\mvn-archetype-generate\hello-world>
转载于:https://www.cnblogs.com/ZeroMZ/p/11520971.html
Maven - Maven3实战学习笔记(2)坐标和依赖相关推荐
- Java 8 实战学习笔记
Java 8 实战学习笔记 @(JAVASE)[java8, 实战, lambda] 文章目录 Java 8 实战学习笔记 参考内容 Lambda表达式 Lambda环绕执行模式(抽离步骤) 原始代码 ...
- Linux性能优化实战学习笔记:第四十六讲=====实战分析
Linux性能优化实战学习笔记:第四十六讲 一.上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU.内存.文件系统和磁盘 I/O.以及网络的性能分析和优化.相信你已经掌握了这些基础模 ...
- JetpackCompose从入门到实战学习笔记2——Modifier的简单使用
JetpackCompose从入门到实战学习笔记2--Modifier的简单使用 1.Image的使用: @Composable fun Image(modifier: Modifier) {Row ...
- 第127讲:Hadoop集群管理之安全模式解析及动手实战学习笔记
第127讲:Hadoop集群管理之安全模式解析及动手实战学习笔记 hadoop在启动时namenode会把fsimage加载进内存,同时和edits内容合并,以此建立整个文件系统的元数据的镜像(内存级 ...
- “物联网开发实战”学习笔记-(四)智能音箱制作和语音控制
"物联网开发实战"学习笔记-(四)智能音箱制作和语音控制 这次来造一个属于自己的智能音箱,这里详细介绍了智能音箱的语音控制的实现. 智能音箱的技术架构 智能音箱主要涉及拾音.前端信 ...
- Word2vec原理+实战学习笔记(二)
来源:投稿 作者:阿克西 编辑:学姐 前篇:Word2vec原理+实战学习笔记(一) 视频链接:https://ai.deepshare.net/detail/p_5ee62f90022 ...
- “物联网开发实战”学习笔记-(二)手机控制智能电灯
"物联网开发实战"学习笔记-(二)手机控制智能电灯 如果搭建好硬件平台后,这一次我们的任务主要是调试好智能电灯,并且连接到腾讯云的物联网平台. 腾讯云物联网平台 腾讯物联网平台的优 ...
- MongoDB 入门教程实战学习笔记-31-mongo 聚合查询管道 Aggregation Pipieline
aggregation 聚合操作处理数据记录并返回计算结果. 聚合操作将多个文档中的值组合在一起, 并且可以对分组数据执行各种操作以返回单个结果. mongodb 提供了三种执行聚合的方法: 聚合管道 ...
- 第55课:60分钟内从零起步驾驭Hive实战学习笔记
第55课:60分钟内从零起步驾驭Hive实战学习笔记 本期内容: 1. Hive本质解析 2. Hive安装实战 3. 使用Hive操作搜索引擎数据实战 SparkSQL前身是Shark,Shark强 ...
- Linux性能优化实战学习笔记:第十讲==中断
Linux性能优化实战学习笔记:第十讲 一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 ? 1 2 3 4 5 6 7 wget http://www.tcp ...
最新文章
- go 接收 ffmpeg avpacket
- 数据库笔记——数据模型
- 学习Matlab强大的符号计算(解方程)
- nginx proxy_cache 缓存配置
- 6月19日 NSFileHandle文件类的常用方法
- 《Windows 8 权威指南》——1.3 引入全新内核休眠模式,实现“瞬间开机”
- Ionic2 下处理 Android 设备下返回按钮的事件
- 继英伟达、三星后,育碧也遭攻击,员工密码重置
- 阶段3 3.SpringMVC·_05.文件上传_2 文件上传之传统方式上传代码回顾
- 2022 年面试工具篇 Jmeter 接口面试题及答案
- c语言报告 列主元lu分解,列主元LU分解法 C++程序
- 基本共射放大电路的简单进化 阻容式耦合放大电路
- Note Of Effective C++ 、More Effective C++ And Effective Modern C++
- 将使用Tkinter编写的带图片的程序打包成exe文件,并且实现图片内嵌
- java对excel进行加密_用poi-3.6-20091214.jar 实现java给excel资料加密
- 【ybt高效进阶4-4-3】【luogu P4513】公园遛狗 / 小白逛公园
- CHAPTER 2 Docker镜像
- 戴尔笔记本电脑重装win10系统详细记录
- 路由器——计算机网络
- AUTOSAR技术分析报告
热门文章
- fatal error: gnu/stubs-n64_hard_2008.h: No such file or directory
- LINUX查询版本情况
- 为何吾博客周排名没有数字显示?
- 龙芯指令集也可以开源
- 黎曼ζ 函数中的Γ是否与欧拉B函数中的Γ一样
- php curl 缓存请求_PHP异步非阻塞实现方法
- html4多文件上传,jQuery h5拖拽多文件上传
- hiveserver2启动不起来_125踏板车电启动发不着时,为什么很少用户使用脚启动?...
- windows 画图
- python4.2_python4.2参数传入