第5章 坐标和依赖

1. 何为Maven坐标

Maven世界定义了这样做一种规则:世界上任务一个构件都可以使用Maven坐标唯一标识。Maven坐标的元素包括groupId,archetypeId,version,package,classifier. Maven内置了一个中央仓库的地址, 改中央仓库包含了世界上大部分流行的开源项目构件。

2. 坐标详解.

Maven坐标为各种构件引入了秩序,任何一个构建都必须明确定义自己的坐标,一组坐标通过如下一些元素定义:groupId, archetypeId, version,packageing,classifier .

一组坐标定义示例:

nacos的maven坐标 maven坐标构成_maven


GroupId,定义当前Maven项目隶属的时间i项目

ArchetypeId,实际项目的一个模块

Version Maven项目版本

Packageing 打包方式,默认为jar 可为jar,war,pom等。 可选 不一定与扩展名一直 maven-plugin生成扩展名为jar。

Classiferi 用来版主定义输出一些附属构件, 如 src, doc包等。

3. 依赖的配置

nacos的maven坐标 maven坐标构成_jar_02


groupId, archetypeId, version 与项目对应。 依赖的基本坐标

type与packageing 对应

scope为依赖的范围

optional 标记依赖是否可选

exclusions 用来排除传递性依赖。

4. 依赖范围

用来控制与是那种claspath(编译、测试、运行)的关系,:

Compile ,默认范围, 都有效。

Test 测试依赖范围 典型的Junit

Provided 已提供的依赖, 编译和测试有效, 运行无效,(servlet-api.jar)

Runtime 运行时依赖, JDBC 驱动, 项目住代码编译时只需要JDK的JDBS借口,执行测试和运行是需要具体的,

System, 系统依赖, 不是maven本地仓库。

system

${JAVA_HOME}/lib/rt.jar

Import: 导入依赖,不会有实际影响。

nacos的maven坐标 maven坐标构成_jar_03

5. 传递性依赖

不必手动引入每一个依赖,可以maven自动解析并下载,

6. 依赖调解

引入传递性依赖,简化了依赖声明,但是传递性依赖造成一些问题我们需要清楚的知道改传递性依赖是从那条以来路径引入的, A_>B_.C ->X , A->D->X。
第一原则:路径最近这优先,
第二原则:第一声明者优先。

7. 可选依赖

可选依赖不会传递,

8. 最佳实践

使用exclusions 排除依赖,只需要 groupId, 和 archetypeId, 不需要version。
归类依赖, spring-framework的 core,context等, 版本verison可以使用常量代替, 统一版本。
优化依赖:
查看当前项目的已解析依赖:mvn dependency:list
查看当前项目的依赖树 mvn dependency:tree
分析依赖树 mvn dependency:analyze 朱分析编译主代码和测试代码需要的依赖。

9. 小结.

Maven的坐标和依赖。