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之前我们一定要知道它是什么 ...
随机推荐
- wincvs配置方法
1.安装wincvs_中文1.3.exe 2.安装cvsnt-2.5.03.2260.msi 安装过程中选择complete选项 3.安装python221-setup.exe 安装完成后,先配置环 ...
- 如何查出sqlserver 性能瓶颈
转载地址:https://www.cnblogs.com/yanwenbink05/p/4047374.html
- Calendar类常用需求方法
经常处理一些日期相关的信息,Calendar类是处理日期的常用类,写下几个方法,不用重复造轮子了. 1.求上一天,下一天的日期 Date now = new Date();Calendar c = C ...
- springboot读取properties和yml配置文件
一.新建maven工程:springboot-configfile-demo,完整工程如下: pom.xml <?xml version="1.0" encoding=&qu ...
- unbuntu14.04下的串口软件monicom的使用
上篇文章写到了将esp-idf中的examples里的helloworld烧写进了esp32的flash里面,本文就讲讲这个例子的测试和一个项目工程的建立. 首先为了得到esp32输出的信息,需要一个 ...
- ESP32 windows开发环境的搭建(官方方法)
首先保证电脑中的已经下载了git客户端,没有的自行去https://git-scm.com/下载 STEP1: 获得编译工具链 Windows没有内置的“make”环境,所以安装工具链你将需要一个兼容 ...
- 安装VS2017后打开项目提示 asp.net 4.0尚未web服务器注册
Visual Studio 2017 出来了,手痒安装完成后打开原来的项目缺提示,asp.net 4.0尚未web服务器注册.郁闷了… 按照提示的方法,如何:将 ASP.NET Web 应用程序升级到 ...
- springboot学习笔记-thymeleaf
Thymeleaf的介绍 简单说, Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP .相较与其他的模板引擎,它有如下三个极吸引人的特点: ...
- 在Java Web中使用Spark MLlib训练的模型
PMML是一种通用的配置文件,只要遵循标准的配置文件,就可以在Spark中训练机器学习模型,然后再web接口端去使用.目前应用最广的就是基于Jpmml来加载模型在javaweb中应用,这样就可以实现跨 ...
- PHPCMS9.6.0最新版SQL注入和前台GETSHELL漏洞分析 (实验新课)
PHPCMS9.6.0最新版中,由于/modules/attachment/attachments.php的过滤函数的缺陷导致了可以绕过它的过滤机制形成SQL注入漏洞,可导致数据库中数据泄漏. 而且在 ...