Maven学习笔记(三)——坐标和依赖

目录

  • 坐标
  • 坐标详解
  • 依赖的配置
  • 依赖的范围
  • 传递性依赖
    • 作用
    • 传递性依赖和依赖范围
  • 传递性调解
  • 最佳实践
    • 排除依赖
    • 归类依赖

坐标

maven定义了这样一组规则,世界上任何一个构件都可以使用maven坐标唯一标识,maven坐标的元素包括groupId, artifactId, version, packaging, classifier。Maven内置了一个中央仓库的地址,该中央仓库包含了世界上大部分流行的开源项目构件,Maven会在需要的时候去那里下载。

坐标详解

groupId:定义当前maven项目隶属的实际项目。
artifactId:定义实际项目中的一个Maven项目,推荐使用实际项目名称作为其前缀。
version:定义Maven项目当前所处的版本。
packaging:定义Maven项目的打包方式。
classifier:帮助定义构建输出的一些附属构建。
前三者为必须定义的,packaging是可选的,classifier不能直接定义。

依赖的配置

根元素project下的dependencies可以包含一个或者多个dependency元素,以声明一个或者多个项目依赖。每个依赖可以包含的元素有:
groupId、artifactId和version:依赖的基本坐标。
type:依赖的类型,对应于项目坐标定义的packaging。
scope:依赖的范围。
optional:标记依赖是否可选。
exclusion:排除传递性依赖。

依赖的范围

Maven在编译、执行测试、实际运行的时候都需要使用不同的classpath。依赖范围就是用来控制依赖与这三种classpath的关系,如下:
Maven学习笔记(三)——坐标和依赖_第1张图片

传递性依赖

作用

有了传递性依赖,在使用类库时就不必考虑它依赖了什么,也不用担心引入多余的依赖。Maven会解析各个直接依赖的pom,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。

传递性依赖和依赖范围

如下图,最左边一列表示第一直接依赖范围,最上面一行表示第二直接依赖范围,中间的单元则表示传递性依赖范围。
Maven学习笔记(三)——坐标和依赖_第2张图片

传递性调解

第一原则:距离近者优先。
第二原则:第一声明者优先。

最佳实践

排除依赖

dependency中exclusions元素声明排除依赖,exclusions可以包含一个或多个exclusion元素,因此可以排除一个或多个传递性依赖。需要注意的是,声明exclusion的时候只需要定义groupId和artifactId,而不需要version,因为这两个就可以定位依赖图中的某个依赖。

归类依赖

见以下配置:


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>org.examplegroupId>
    <artifactId>hello-worldartifactId>
    <version>1.0-SNAPSHOTversion>

    <properties>
        <junit.version>4.12junit.version>
        <slf4j.log4j.version>1.7.25slf4j.log4j.version>
        <fastjson.version>1.2.47fastjson.version>
    properties>

    <dependencies>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>${junit.version}version>
            <scope>testscope>
        dependency>
        <dependency>
            <groupId>org.slf4jgroupId>
            <artifactId>slf4j-log4j12artifactId>
            <version>${slf4j.log4j.version}version>
        dependency>
        <dependency>
            <groupId>com.alibabagroupId>
            <artifactId>fastjsonartifactId>
            <version>${fastjson.version}version>
        dependency>
    dependencies>

project>

你可能感兴趣的:(Maven学习笔记)