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(坐标和依赖)的更多相关文章

  1. Maven学习笔记—仓库

    Maven仓库 1 什么是Maven仓库 在Maven中,任何一个依赖.插件或者项目构建的输出,都可以成为构件,而Maven通常在某个位置统一的存储所有Maven项目共享的构件,这个统一的位置就是Ma ...

  2. MAVEN学习笔记之Maven插件的应用(4)

    MAVEN学习笔记之Maven插件的应用(4) <build> <pluginManagement> <plugins> <plugin> <gr ...

  3. MAVEN学习笔记之Maven生命周期和插件简介(3)

    MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所 ...

  4. MAVEN学习笔记之基础(1)

    MAVEN学习笔记之基础(1) 0.0 maven文件结构 pom.xml src main java package resource test java package resource targ ...

  5. Maven 学习笔记(二)

    前面一文——Maven 学习笔记(一)中已经提到了 pom 的大部分配置,Maven 本质上是一个插件框架,它的核心并不执行任何具体的构建任务,所有这些任务都交给创建来完成,每一个任务都会对应一个插件 ...

  6. Maven学习笔记-03-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  7. seaJs学习笔记之javascript的依赖问题

    之前分别为大家介绍了有关javascript中的冲突和性能问题,今天为大家介绍一下有关javascript中的依赖问题.我们将继续就之前javascript中性能问题继续介绍. 先来回顾一下性能问题的 ...

  8. Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  9. MAVEN学习笔记之私服Nexus(2)

    MAVEN学习笔记之私服Nexus(2) 私有服务器搭建 Nexus www.snatype.org下载 snatype-work 是默认nexus存储nexus a:将bin添加到环境中 Admin ...

  10. go微服务框架kratos学习笔记八 (kratos的依赖注入)

    目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...

随机推荐

  1. MySQL 权限相关

    # ============================= mysql 权限相关 =====================================================gran ...

  2. mac下新建txt文本快捷方式.md

    转:127.0.0.1:47873/help/0-436/ms.help?method=page&id=A38C5670-BA28-44F3-BD5B-FCB46880E904&pro ...

  3. c语言作业01-分支、顺序结构

    1.本章思考总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 这一个星期算是我学习c语言的起点,因为暑假没有提前自学c语言,所以一上课时会觉得比较吃力也难以跟上其他大部分同 ...

  4. MongoDB基本语法

    建立连接 client = pymongo.MongoClient() 新建数据库 db = client["db_name"] 新建表 tble=db["table_n ...

  5. CentOS 6.8下网卡配置、桥接模式和NAT连接模式、VMware虚拟机克隆网卡配置

    模式一:桥接模式: 1. 在VMware中安装好虚拟机后,虚拟机网卡设置:选择桥接模式 2. 查看本机的网络信息: 找到ip.子网掩码.网关.DNS等. 找一个没有使用的ip,例如:192.168.1 ...

  6. mysql数据库优化之 如何选择合适的列建立索引

    1. 在where 从句,group by 从句,order by 从句,on 从句中出现的列: 2. 索引字段越小越好: 3. 离散度大的列放到联合索引的前面:比如: select * from p ...

  7. VS code 代码格式整理的配置

    { "workbench.iconTheme": "material-icon-theme", "vetur.validation.template& ...

  8. 转:Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-j8m0mf5q/mysqlclient

    错误场景 第一次部署服务器时mysqlclient安装失败 思考 初步考虑是pip没有升级,最后发现不是这个原因. 解决办法 来源:https://blog.csdn.net/mr_tia/artic ...

  9. Linux 防火墙iptables开放端口

    Iptabels是与Linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含Iptables的功能.如果 Linux 系统连接到因特网或 LAN.服务器或连接 LAN 和因特网的代理 ...

  10. centos7下编译安装nginx-1.16.0

    一.下载nginx源码 http://nginx.org/en/download.html 如:nginx-1.16.0.tar.gz 二.创建用户和组,并解压 groupadd www userad ...