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文件中谁先声明,谁被使用
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文件中谁先声明,谁被使用
相关文章推荐
- maven-坐标与依赖
- maven3实战之坐标和依赖(依赖的配置)
- maven详解之坐标与依赖
- maven坐标和依赖详解
- maven详解之坐标与依赖
- Maven学习笔记十七:Maven坐标和依赖(最佳实践之优化依赖)
- Maven实战、5.坐标与依赖
- Maven详解——坐标的概念以及依赖管理
- Maven学习笔记2(坐标和依赖)
- 第四节:Maven坐标和依赖(下)
- Maven学习笔记(一):Maven的坐标和依赖
- maven详解之坐标与依赖
- 【Maven】---坐标与依赖
- maven3实战之坐标和依赖(依赖范围)
- 3 Maven坐标和依赖
- Maven学习总结系列四:坐标与依赖
- Maven坐标和依赖
- Maven(三)坐标与依赖
- maven学习-2 坐标和依赖
- maven3实战之坐标和依赖(传递性依赖)