在PC端上面关于Maven的安装等情况我这里就不再复述了,不懂的请自行百度谷歌。

今天聊一下Maven 里面的结构,及相关依赖解释。


groupId,artfactId,version,type,classifier,scope,systemPath,exclusions,optional 是 maven的9种依赖属性,

其中groupId,artfactId,version是三个基本的依赖坐标,不可缺少。
groupId------包名(一般为域名的反写)。
artfactId------项目名。
version-------版本。 type----------依赖的类型,jar或者war(默认为jar,表示依赖的是一个jar包),另外当type表示为<type>pom.lastUpdated</type> 这种属性时,表示只将jar的描述信息加载了进来,实际的jar包并未导入。 classifier----通常是用于从同一POM构建的拥有不同内容的构件,可选属性,可以是任意的字符串。对附加了classifier属性的包,如果不加上classifier,maven是找不到这个包的,比如下面这个依赖:


<dependency>  
     <groupId>net.sf.json-lib</groupId>   
     <artifactId>json-lib</artifactId>   
     <version>2.2.2</version>  
</dependency>  发现中央仓库中并没有json-lib-2.2.2.jar这个包 ,自然也就找不到了,有的只是不同版本的json-lib-2.2.2.jar,这个时候classifier就可以指明所想要版本。 <dependency>  
     <groupId>net.sf.json-lib</groupId>   
     <artifactId>json-lib</artifactId>   
     <version>2.2.2</version>
     <classifier>jdk15</classifier>
</dependency>   这样就可以找到json-lib-2.2.2-jdk15.jar这个包 classifier不仅可以指明版本号,可以指明同一项目的不同组成部分,比如:源文件,javadoc,类文件等。在上面的图中你会发现还有一些json-lib-2.2.2-jdk15-javadoc.jar包和json-lib-2.2.2-jdk15-source.jar包,如果你需要的是javadoc,在XML文档中就可以这样写: <dependency>  
     <groupId>net.sf.json-lib</groupId>   
     <artifactId>json-lib</artifactId>   
     <version>2.2.2</version>
     <classifier>jdk15-javadoc</classifier>
</dependency>  


scope一共有compile,runtime,test,system,provided 5种属性值,compile为其默认值,其中:




compile表示在所有范围此jar都生效,

test表示只在测试范围此jar生效,例如Junit(默认compile,不会报错,扩展了test),

runtime表示在测试和运行时此jar生效,例如JDBC驱动(默认compile,不会报错,扩展了runtime),我们在编译时是没有用到这个包的,只在测试和运行时会使用到,

provided表示在编译和测试时此jar生效,例如servlet-api,jsp-api,这个的provided必须填写,不能使用compile,原因是:

system表示我们手动添加的包,不属于maven仓库,属于别的类库的jar包,只在编译和测试期生效,运行时无效,一般不用,使用时,需要配合下面的systemPath使用。

systemPath--为并非依赖maven的包指明路径。

在项目中创建一个lib作为手动导入的jar包存储位置,

exclusions---排除传递依赖,解决jar冲突问题,

依赖传递的意思是项目A依赖项目B,项目B依赖项目C,在使用项目A时,就会加载项目B,这样传递依赖就会把项目C,D,E等等加载进来。其中B是A的直接依赖,C是A的间接依赖

例如:A项目依赖B(版本为1.1),C项目也依赖B(版本为1.2),假如现在有一个项目同时依赖项目A和项目B,那么他就会导入两个版本的B,由于B的两个版本不同,这里就会导致冲突,这个时候就需要exclusions来解决冲突,不过maven也有一个机制会避免两个都加载进去,

下面先介绍maven的依赖调节原则:

1,第一原则:路径近者优先原则

                       A→B→C→X(1.1)

                       D→E→X(1.2)

                       使用X(1.2),因为其路径更近

2,第二原则:第一声明者优先原则

                       A→B→X(1.1)

                       C→D→X(1.2)

                      使用X(1.1),因为其先声明

maven会先根据第一原则判断,若路径相等,再根据第二原则判断

但是我们还是使用exclusions来配置更加合理,我们使用spring bean 和 struts2 spring plugin来举个例子说明这个问题并使用exclusions来解决这个问题(spring bean 和 struts2 spring plugin都依赖spring-core但是版本不一样)

先把两个jar包在本地仓库中找到

optional-----标记依赖是否可传递,默认值false,比如上面的项目A和项目B,optional可以用来减少项目之间jar包的冲突。

Maven 相关知识点解释的更多相关文章

  1. TCP/IP 相关知识点与面试题集

    第一部分:TCP/IP相关知识点 对TCP/IP的整体认 链路层知识点 IP层知识点 运输层知识点 应用层知识点 (这些知识点都可以参考:http://www.cnblogs.com/newwy/p/ ...

  2. python实现单例模式的三种方式及相关知识解释

    python实现单例模式的三种方式及相关知识解释 模块模式 装饰器模式 父类重写new继承 单例模式作为最常用的设计模式,在面试中很可能遇到要求手写.从最近的学习python的经验而言,singlet ...

  3. React其它相关知识点

    React其它相关知识点 一,解释一下React Fiber? 简单来说,核心就是在虚拟dom和浏览器的调用栈之间多了一个虚拟调用栈,和虚拟dom一样,这个虚拟调用栈也是在内存中的,这个虚拟调用栈就类 ...

  4. UITableView相关知识点

    //*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...

  5. [ARM] Cortex-M Startup.s启动文件相关代码解释

    1. 定义一个段名为CSTACK, 这里: NOROOT表示如何定义的段没有被关联,那么同意会被优化掉,如果不想被优化掉就使用ROOT. 后面的括号里数字表示如下: (1):这个段是2的1次方即2字节 ...

  6. Android开发涉及有点概念&相关知识点(待写)

    前言,承接之前的 IOS开发涉及有点概念&相关知识点,这次归纳的是Android开发相关,好废话不说了.. 先声明下,Android开发涉及概念比IOS杂很多,可能有很多都题不到的.. 首先由 ...

  7. IOS开发涉及有点概念&相关知识点

    前言,IOS是基于UNIX的,用C/C+/OC直通系统底层,不想android有个jvm. 首先还是系统架构的分层架构 1.核心操作系统层 Core OS,就是内存管理.文件系统.电源管理等 2.核心 ...

  8. IOS之UI--小实例项目--添加商品和商品名(使用xib文件终结版) + xib相关知识点总结

    添加商品和商品名小项目(使用xib文件终结版) 小贴士:博文末尾有项目源码在百度云备份的下载链接. xib相关知识点总结 01-基本使用 一开始使用xib的时候,如果要使用自定义view的代码,就需要 ...

  9. 学习记录013-NFS相关知识点

    一.NFS相关知识点 1.NFS常用的路径/etc/exports NFS服务主配置文件,配置NFS具体共享服务的地点/usr/sbin/exportfs NFS服务的管理命令,exportfs -a ...

随机推荐

  1. java 线程安全(初级)

    创建和启动Java线程 Java线程是个对象,和其他任何的Java对象一样.线程是类的实例java.lang.Thread,或该类的子类的实例.除了对象之外,java线程还可以执行代码. 创建和启动线 ...

  2. [Javascript] Window.matchMedia()

    window.matchMedia() allow to listen to browser window size changes and trigger the callback for diff ...

  3. WinDbg常用命令系列---.write_cmd_hist (写命令历史记录)

    .write_cmd_hist 简介 .write_cmd_hist命令将调试器命令窗口的整个历史记录写入文件. 使用形式 .write_cmd_hist Filename 参数 Filename指定 ...

  4. Windows异常分发函数---KiUserExceptionDispatcher

    简介 KiUserExceptionDispatcher 是SEH分发器的用户模式的负责函数.当一个异常发生的时候,该异常将生成一个异常事件,内核检查该异常是否是由于执行用户模式代码导致的.如果是这样 ...

  5. dbt 0.14.0 试用

    dbt 0.14.0 在最近已经发布了,dbt server 的还是很不错的特性,以下安装试用下几个新功能 环境准备 安装 如果没有安装的: pip install dbt 已经安装的: pip in ...

  6. 原生 ajax 请求

    ajax 即 Asynchronous Javascript And XML,AJAX 不是一门的新的语言,而是对现有持术的综合利用.本质是在 HTTP 协议的基础上以异步的方式与服务器进行通信. 异 ...

  7. 牛顿插值法(c++)

    X Y 0.40 0.41075 0.55 0.57815 0.65 0.69675 0.80 0.88811 0.90 1.02652 1.05 1.25382 #include using nam ...

  8. 谈下sublime和vscode

    sublime用了好多年一直没有换掉 它的体积小运行启动快用着一直很顺手,而且也有不少的插件可以去安装, 而相对于vscode 开始觉得他启动慢有点笨重的感觉,可能是我电脑原因用着卡卡的所以一直没换成 ...

  9. K8S组件

    Master 组件 Master组件提供集群的管理控制中心.Master组件可以在集群中任何节点上运行.但是为了简单起见,通常在一台VM/机器上启动所有Master组件,并且不会在此VM/机器上运行用 ...

  10. gitignore文件示例

    /target/ !.mvn/wrapper/maven-wrapper.jar ### STS ### .apt_generated .classpath .factorypath .project ...