您的位置:首页 > 其它

maven坐标与依赖

2017-05-10 20:00 204 查看
maven坐标

Maven定义了这样一组规则:世界上的任何一个构件都可以使用maven坐标唯一标识,Maven坐标的元素包groupId,artifactId,version,packaging,classifier。在我们开发自己的项目的时候,也需要为其定义适当的坐标,这是maven强制要求的。

groupId:定义当前Maven项目隶属的实际项目,Maven项目与实际项目不一定是一对一关系的。比如springFramework这一实际项目,与其对应的Maven项目会有许多,如:spirng-core ,spring-context,这是由于maven中模块的概念,一个项目往往会被划分成很多模块。groupId的标识方式与Java报名的标识方式类似,通常与域名相反,如org.sonatype.nexus表示sonatype公司创建的一个非营利性组织.nexus标识Nexus这一实际项目

artifactId:表示实际项目中的一个maven模块,推荐的做法是使用实际项目名称作为前缀,再加模块名称,如spring-core

version:表示maven项目当前版本

packaging:表示maven项目的打包方式,如jar和war

classifier:该元素用来帮助定义构建输出 的一些附属构件,如Javadoc,sources,其中包含了Java文档和源代码

maven依赖配置

maven的依赖声明包含如下部分:



其中groupId,artifactId,version三者是依赖的基本

type:依赖的类型,大部分情况不用声明,默认为jar

scope:依赖范围

依赖范围是用来控制,依赖与编译,测试运行的关系,maven有一下几个依赖范围:

compile:编译依赖范围,如果没有指定默认是它,在编译测试运行阶段都要使用它

test:测试依赖,只对测试范围依赖,在编译主代码,或运行项目时无法使用,如junit

provided:提供依赖范围,对测试编译有效,运行无效,如servlet-api,在测试编译时需要,但在运行时容器已经
提供不需要重复引入

runtime:运行时依赖,如jdbc驱动实现,项目主代码编译时只需要jdk提供的jdbc接口,只有在项目测试和运行时
才需要实现

system:系统依赖范围,此依赖不通过maven仓库解析,往往与本机系统绑定,因此几乎不用

import:导入依赖

只有在dependencyManagement下才有用,通过import可以将一个打包类型为pom的模块中的dependencyManagement配置合并到当前pom的dependencyManagement元素中

optional:标记依赖是否可选

如:持久层隔离工具包,它支持多种数据库,包括mysql,oracle等,在构建这个工具包时,需要这两种驱动程序,但使用的时候,只会依赖一种数据库

exclusions:用来排除依赖传递

如A项目依赖B,B依赖C,不想引入传递性依赖C,而显示的声明对于C1.1.0的依赖



传递性依赖

建设A依赖与B,B依赖与C ,A对于B是第一依赖,B对于C是第二直接依赖,A对于C是传递性依赖。

Maven依赖调节原则:

①路径最近者优先

②第一声明者优先

如A→B→C →X (1.0)、A→D→X(2.0) 那么X2.0路径比X1.0路径近,所以X2.0会被使用

如A→B→X (1.0)、A→D→X(2.0)那么在pom文件中谁先声明,谁被使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: