Maven教程3(依赖管理)
Maven项目,依赖,构建配置,以及构件:所有这些都是要建模和表述的对象。这些对
象通过一个名为项目对象模型(Project Object Model, POM)的XML文件描述。这个POM
告诉Maven它正处理什么类型的项目,如何修改默认的行为来从源码生成输出。同样
的方式,一个Java Web应用有一个web.xml文件来描述,配置,及自定义该应用,一个
Maven项目则通过一个 pom.xml文件定义。该文件是Maven中一个项目的描述性陈述;也
是当Maven构建项目的时候需要理解的一份“地图”。
1.maven坐标
<dependencies>
<!-- 因为是web项目所以需要servlet -->
<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
1.1 dependencies
在dependencies标签中添加需要依赖的jar对应的maven坐标
1.2 dependency
一个dependency标签表示一个maven坐标
1.3groupId
团体,公司,小组,组织,项目,或者其它团体。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。来自Sonatype的项目有一个以com.sonatype开头的groupId,而Apache Software的项目有以org.apache开头的groupId,一个maven坐标必须包含一个groupId必须的
1.4artifactId
在groupId下的表示一个单独项目的唯一标识符。比如我们的tomcat, commons等。不要在artifactId中包含点号(.) ,必须的
1.5version
一个项目的特定版本。发布的项目有一个固定的版本标识来指向该项目的某一个特定的版本。而正在开发中的项目可以用一个特殊的标识,这种标识给版本加上一个"SNAPSHOT"的标记。
虽然项目的打包格式也是Maven坐标的重要组成部分,但是它不是项目唯一标识符的一个部分。一个项目的 groupId:artifactId:version使之成为一个独一无二的项目;你不能同时有一个拥有同样的groupId, artifactId和version标识的项目。必须的
1.6scope
依赖范围
| 依赖范围 | 编译有效 | 测试有效 | 运行时有效 | 打包有效 | 例子 |
|---|---|---|---|---|---|
| Complie | √ | √ | √ | √ | spring-core |
| test | × | √ | × | × | Junit |
| provided | √ | √ | × | × | servlet-api |
| runtime | × | √ | √ | √ | JDBC驱动 |
| system | √ | √ | × | × | 本地maven仓库 之外的类库 |
1.7构建索引
构建索引便于在maven本地仓库中检索
window --> show --> other -->maven




2.依赖冲突
2.1冲突产生的原因
A[a jar] -- 依赖 --> B((b jar))
B --依赖--> D[c jar 1.2版本]
A[a jar] -- 依赖 --> B((d jar))
B --依赖--> D[c jar 1.3版本]
上图中a jar包通过b和d间接依赖到的c jar包版本不一致,出现了冲突
| 依赖关系 | 实例 |
|---|---|
| 直接依赖 | a和b的依赖关系 |
| 间接依赖 | a和c的依赖关系 |
比如:
<!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-spring-plugin -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>

2.2依赖冲突解决
2.2.1第一优先声明原则
先定义的先使用


2.2.2路径就近原则
直接声明使用

2.2.3排除依赖
排除掉两个冲突中的一个,那么另一个就自然使用了



2.2.4版本依赖

上一篇:Maven教程2(Eclipse配置及maven项目)
下一篇:Maven教程4(私服)
Maven教程3(依赖管理)的更多相关文章
- Gradle系列教程之依赖管理(转)
转自Lippi-浮生志 :http://ezlippi.com/blog/2015/05/gradle-dependency-management.html 这一章我将介绍Gradle对依赖管理的强大 ...
- 4.Maven概念模型,maven的生命周期,Maven坐标,依赖管理(依赖范围,依赖声明),仓库管理,私服概念
1 maven概念模型 2 maven的生命周期,项目构建过程 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdG90b3R1enVvcXVhbg== ...
- Gradle实战教程之依赖管理
这是从我个人网站中复制过来的,原文地址:http://coolshell.info/blog/2015/05/gradle-dependency-management.html,转载请注明出处. 简要 ...
- Gradle系列教程之依赖管理
这一章我将介绍Gradle对依赖管理的强大支持,学习依赖分组和定位不同类型仓库.依赖管理看起来很容易,但是当出现依赖解析冲突时就会很棘手,复杂的依赖关系可能导致构建中依赖一个库的多个版本.Gradle ...
- Maven解读:项目依赖管理如何优化
Github地址:https://github.com/zwjlpeng/Maven_Detail Maven最大的好处莫过于其强大的依赖管理系统,在Pom配置文件中指定项目需要的Jar包的坐标,Ma ...
- Maven教程4(私服-nexus)
仓库管理器也叫私服或代理仓库 仓库管理器有两个服务目的:首先它的角色是一个高度可配置的介于你的组织与公开Maven仓库之间的代理,其次它为你的组织提供了一个可部署你组织内部生成的构件的地方. 1Nex ...
- Maven教程2(Eclipse配置及maven项目)
Maven教程1(介绍安装和配置) Eclipse中配置maven 1.Eclipse中默认集成的有Maven 可以使用默认的,本地仓库在当前用户下的.m2文件夹下. 2.配置我们自己安装的maven ...
- Maven最佳实践:管理依赖
From:http://juvenshun.iteye.com/blog/337405 Maven最佳实践:管理依赖 "If I have seen further it is by sta ...
- 从初识Maven到使用Maven进行依赖管理和项目构建
前些天就安装了Maven,以备自己以后整合项目用,尤其是我们的ssh,ssm项目.想必好多人在开始的时候并不清楚Maven是什么,它能够帮助我们干什么. 所以在学习Maven之前我们一定要知道它是什么 ...
随机推荐
- 哪些人才适合转行学习UI设计?
最近有很多学员问,怎么才知道自己适不适合学习UI设计,在从事IT教育行业多年以来,也确实碰到好多人咨询这个问题,今天就和大家说下,哪些人才适合转行学习UI设计?(转行必看) 1 平面设计师.网页设计师 ...
- ABP框架系列之四十:(Notification-System-通知系统)
Introduction Notifications are used to inform users on specific events in the system. ASP.NET Boiler ...
- abaqus6.14导出网格inp以及导入inp以建模
建好part,组装后,划分网格,然后建立job,之后write input就可以在工作目录生成刚才新建网格的单元和节点编号信息了. *Heading ** Job name: buildmodel M ...
- noip第17课资料
- 安装Intellij IDEA(ideaIU-2017.2.3)并完成Intellij IDEA的简单配置
一.Intellij IDEA的简介 Intellij IDEA是java语言的集成开发环境,与Eclipse相比,它的功能更多.更强大.更智能,Eclipse更适合刚学习java语言的初学者,它操作 ...
- RSA 算法
RSA 算法 from http://www.matrix67.com/blog/archives/5100 所有工作都准备就绪,下面我们可以开始描述 RSA 算法了. 首先,找两个质数,比如说 1 ...
- Runtime之成员变量&属性&关联对象
上篇介绍了Runtime类和对象的相关知识点,在4.5和4.6小节,也介绍了成员变量和属性的一些方法应用.本篇将讨论实现细节的相关内容. 在讨论之前,我们先来介绍一个很冷僻但又很有用的一个关键字:@e ...
- cant found Microsoft.VSSDK.BuildTools.15.0.26201
如果在vs扩展开发中出现 严重性 代码 说明 项目 文件 行 禁止显示状态 错误 Failed to load 'C:\程序\EncodingNormalior\packages\Microsoft. ...
- 8. Filters in ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】
ASP.NET Filers用来在MVC框架的不同请求处理阶段,注入额外的逻辑.过滤器为横切关注点提供了一种方法(日志记录,授权,缓存). 在这篇文章中,我将会向你介绍MVC框架支持的各种不同种类过滤 ...
- Codeforces gym102152 K.Subarrays OR
传送:http://codeforces.com/gym/102152/problem/K 题意:给定$n(n\le10^5)$个数$a_i(a_i\le10^9)$,对于任一个子数组中的数进行或操作 ...