坐标和依赖
来源:互联网 发布:国网网络大学考试烦人 编辑:程序博客网 时间:2024/06/09 19:24
1.坐标详解:
Maven坐标为各种构件引入了秩序,任何一个构件都必须明确定义自己的坐标,而一组Maven坐标通过一些元素定义的。如:groupId,artifactId,version,packaging,classifier等。
例子:
<groupId>org.sonatype.nexus</groupId> // 定义Maven项目隶属的是实际项目
<artifactId>nexus-indexer</artifactId> //实际项目中的一个模块
<version>jar</version> //当前的版本
<packaging></packaging> //该元素定义Maven项目的打包方式。首先打包方式通常与所生构件的文件扩展名对应。如上面实例中的packing为jar,最终的文件是:nexus-indexer-2.0.0.jar
2.依赖范围:
complie:编译依赖范围;如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。例子:Spring-core
test: 测试依赖范围;只对测试的classpath有效。例子:Junit
provided:已提供依赖范围;使用此依赖范围的Maven依赖,对于编译和测试classp有效,但是在编译主代码时无效。例子:servlet-api
runtime: 运行范围;在测试和运行classpath有效,但是在编译主代码时无效;例子:JDBC驱动实现
system: 系统依赖范围;该依赖与三种classpath的关系和provided依赖范围完全一致
3.依赖传递
依赖调度:项目A依赖关系:A->B->C->X(1,0),A->D->X(2,0);X是A的依赖传递,但是俩条依赖路径上有俩个版本的X;Maven如何解析:Maven依赖调度的第一个原则是:路径最近者优先;当俩个路径都为一样的时候,就采用Maven第二个原则:第一声明者优先;如:A->B->C->X(1,0),A->D->E->X(2,0);俩个路径都是2;那么会解析第一个,x(1,0);
4.可选依赖
假设有这一个依赖关系:项目A依赖于项目B,项目B依赖于项目X和Y,B对X和Y的依赖都是可选依赖;A->B、B->X(可选)、B-Y(可选)如果所有者三个依赖的范围都是compile,那么X,Y就是A的compile范围传递性依赖。由于这里X,Y是可选依赖,依赖将不会传递,即:X,Y将不会对A有任何影响:
最佳实战:(Maven依赖常见的技巧)
1.排除依赖
传递性依赖,会给项目隐士的引入很多依赖,极大简化项目依赖的管理,但是会带来麻烦
项目A依赖与项目B,但是由于一些原因,不想引入传递性依赖C,而是自己显示地声明地声明对于项目C1.1.0版本依赖。代码中使用exclusions元素声明排除依赖,exclusions可以包含一个和多个exclusion子元素。exclusion只需要groupId 和 artifactId。
2.归类依赖:
用properties声明;然后在下面使用,统一版本。
3.优化依赖
Maven会自动解析所有项目的直接依赖和传递性依赖,并且根据正确判断每个依赖的范围,对于一些依赖冲突,也能够进行调节,以确保任何一个构件只有唯一的版本在依赖张存在。最后得到的那些依赖称为已解析依赖(Resolved Dependcy).可以运行如下的命令查看当前项目的已解析:
mvn dependcy:list
mvn dependcy:tree
mvn dependcy:analyze
0 0
- maven 坐标和依赖
- maven坐标和依赖
- 6、坐标和依赖
- 【Maven】坐标和依赖
- 坐标和依赖
- 坐标和依赖
- Maven坐标和依赖
- Maven-坐标和依赖
- Maven 坐标和依赖
- Maven坐标和依赖
- Maven坐标和依赖
- 坐标和依赖
- [Maven Essentials] 坐标和依赖
- Maven实战(坐标和依赖)
- Maven教程-坐标和依赖
- maven(5)坐标和依赖
- maven--坐标和依赖管理
- maven坐标和依赖详解
- 加密和认证
- 重写 log4j RollingFileAppender,支持每日归档
- 条件语句和linux下c编程初体验
- html 如何让微信里的html应用弹出“点击右上角分享到朋友圈”的图片
- 远程使用数据库
- 坐标和依赖
- 有关于Mysql的MERGE表类型
- (转自两篇)相对布局与线性布局的区别
- androidmanifest.xml解析
- UVa 1595 - Symmetry
- 在线支付接口开发总结
- linux系统移植和根文件系统制作
- Maven仓库
- ContentUris类使用介绍