Maven学习笔记2(坐标和依赖)
1、坐标
Maven坐标为各个构件建立了秩序,任何一个构件都必须明确自己的坐标,一个maven坐标是由一些元素确定的
<groupId>com.alivn.account</groupId>
<artifactId>account-email</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
groupId:定义为maven项目隶属的实际项目,可以相当于为一个项目的顶级。 比如 支付系统
artifactId:maven项目的一个子项目 比如 支付系统下的dao模块
version:当前项目的版本号
packaging:定义该maven项目的打包方式 默认jar
classifier:帮助构建输出一些附属属性,比如account-email.1.0.jar, 借助插件生成account-email.1.0-doc.jar(apiw文档)
2、依赖
每个project根元素下,可以包含节点<dependencies>节点。里面包含了若干依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
<type>jar</type>
<optional>true</optional>
<exclusions>
<exclusion>
<groupId>${dependencygroupId}</groupId>
<artifactId>${dependencyartifactId}</artifactId>
</exclusion>
</exclusions>
</dependency>
groupId、artifactId、version是一个引入一个依赖必不可少的元素。
scope:依赖的作用范围 test表示 只在test的代码里面的生效
type:依赖的类型 对应packaging
optional:依赖是否可选。
exclusions:排除依赖,当第二依赖里面依赖了一个不稳定的快照版本的jar时候,存在潜在危险,所以我们应该排除第二依赖里面的那个不稳定版本的依赖,在pom中引用为直接依赖。
3、依赖范围
maven在编译 测试 和运行时会使用三个不同的classpath,会根据以依赖范围处理不同的内容,比如主编译时,不会加入scope为test范围的代码,因为它的依赖范围是test
有以下几种依赖范围
compile:编译依赖范围 默认值 对编译 测试 运行 三种 classpath都有效
test:测试依赖范围 只对测试classpath有效
provided:以提供以来范围,仅对编译和测试有效,运行无效,比如servlet-*jar,运行时 框架有tomcat提供jar
runtime:对测试和运行有效 但编译无效 如JDBC驱动,只在运行的时候决定使用哪个数据库的驱动
system:系统依赖范围,和provided范围一致,但必须通过systemPath显示指定依赖文件
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
<scope>system</scope>
<systemPath>${home}/lib/mysql.rt</systemPath>
</dependency>
4、传递性依赖
A->B ,B->C=》A->C
如果A依赖于B B依赖于C 那么A依赖于C B为A 的第一直接依赖 C为B 的第二直接依赖。
根据scope的依赖范围不同 可以将C于A 的依赖范围 也会有变化 ,具体变化为以下表格 蓝色字体为第一直接依赖 红色字体为第二直接依赖
| 依赖范围 | compile | test | provided | runtime |
| compile | compile | —— | —— | runtime |
| test | test | —— | —— | test |
| provided | provided | —— | provided | provided |
| runtime | runtime | —— | —— | runtime |
5、依赖调解
maven传递依赖为我们带来了很多的方便,但是如果 A->B->C(2.0) A->D->C(1.0) 这个时候会解析 哪个版本的C
maven有两条规则:(当第一条规则 不生效时 使用第二条规则)
1、路径最近者优先 实例中 都是两步 距离是相同的 如果不同则去最近者
2、第一声明者优先 程序中 看B 和C 哪个jar里面的类先被使用,然后解析先被使用的jar的那条线路上的c
6、查看依赖的命令
mvn dependency:list(显示所有已解析的依赖)
mvn dependency:tree(显示依赖树)
mvn dependency:analyze(分析当前项目的依赖)
Maven学习笔记2(坐标和依赖)的更多相关文章
- Maven学习笔记—仓库
Maven仓库 1 什么是Maven仓库 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以成为构件,而Maven通常在某个位置统一的存储所有Maven项目共享的构件,这个统一的位置就是Ma ...
- MAVEN学习笔记之Maven插件的应用(4)
MAVEN学习笔记之Maven插件的应用(4) <build> <pluginManagement> <plugins> <plugin> <gr ...
- MAVEN学习笔记之Maven生命周期和插件简介(3)
MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...
- MAVEN学习笔记之基础(1)
MAVEN学习笔记之基础(1) 0.0 maven文件结构 pom.xml src main java package resource test java package resource targ ...
- Maven 学习笔记(二)
前面一文——Maven 学习笔记(一)中已经提到了 pom 的大部分配置,Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给创建来完成,每一个任务都会对应一个插件 ...
- Maven学习笔记-03-Eclipse下maven项目在Tomcat7和Jetty6中部署调试
现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...
- seaJs学习笔记之javascript的依赖问题
之前分别为大家介绍了有关javascript中的冲突和性能问题,今天为大家介绍一下有关javascript中的依赖问题.我们将继续就之前javascript中性能问题继续介绍. 先来回顾一下性能问题的 ...
- Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试
现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...
- MAVEN学习笔记之私服Nexus(2)
MAVEN学习笔记之私服Nexus(2) 私有服务器搭建 Nexus www.snatype.org下载 snatype-work 是默认nexus存储nexus a:将bin添加到环境中 Admin ...
- go微服务框架kratos学习笔记八 (kratos的依赖注入)
目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...
随机推荐
- 修复windows通过局域网文件共享访问失败的问题
参考链接1:https://blog.csdn.net/lmlmopenrtion/article/details/84378163 参考链接2:https://answers.microsoft.c ...
- 简易机器学习代码(LR,Kmeans,NN,RNN)
Logistic Regression 特别需要注意的是 exp 和 log 的使用. sigmoid 原始表达式为 1 / (1+exp(-z)),但如果直接使用 z=-710,会显示 overfl ...
- python字符串 列表 元组 字典相关操作函数总结
1.字符串操作函数 find 在字符串中查找子串,找到首次出现的位置,返回下标,找不到返回-1 rfind 从右边查找 join 连接字符串数组 replace 用指定内容替换指定内容,可以指定次数 ...
- Day09 -超级经典面试题:Ruby的a ||= b(or-equals)是什么意思呢?
前情提要: 写了这一系列下来,发现Ruby有许多特别的方法.前几天提到String字串,并且接续着在第八天我们了解串接(concatenate)与插入interpolation#{}方法(就连加号+也 ...
- uni-app 使用 iconfont
使用 uni-app 做项目时需要用到 iconfont.和 web 使用略有差别.谨以此记录. 因为 uni-app 不能使用本地字体图标库,所以不能直接下载使用. 1.将iconfont中需要的图 ...
- Taro开发微信小程序之利用腾讯地图sdk标记
首先要下载腾讯地图提供的sdk,放在项目的对应目录下,引用. import QQMapWX from '../../sdks/qqmap-wx-jssdk' 设置好后,就可以开始使用了. let qq ...
- Tomcat 配置文件
Tomcat 的配置文件并不多,由4个 xml 文件组成,分别是 context.xml.web.xml.server.xml.tomcat-users.xml 这几个文件.每个文件都有自己的功能与配 ...
- Java框架spring 学习笔记(七):Spring相关概念
Spring是开源.轻量级.一站式框架. Spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码实现. ioc:控制反转,把对象的创建交给Spring进行配置,比如一个类,在类里面有 ...
- windows内核驱动内存管理之Lookaside使用
Windows内存管理中使用了类似于容器的东西,叫做Lookaside对象,每次程序员申请内存都会从Lookaside里面申请,只有不足的时候,Lookaside才会向内存又一次申请内存空间,这样减少 ...
- 执行多条SQL语句,实现数据库事务(不可传入Sql参数)
执行多条SQL语句,实现数据库事务(不可传入Sql参数) http://blog.csdn.net/hanxuemin12345/article/details/9980371