美文网首页
Maven实战笔记-依赖

Maven实战笔记-依赖

作者: 臂力棒在想 | 来源:发表于2020-06-20 23:34 被阅读0次

依赖配置

根元素 project 下的 dependencies 可以包含一个或者多个 dependency 元素,以声明一个或者多个项目依赖。

  • groupId、artifactId 和 version:依赖的基本坐标。
    大部分依赖声明支持包含基本坐标,一些特殊情况下,会使用以下元素。
  • type:依赖的类型,对应于项目坐标定义的 packaging。默认值为 jar。
    scope:依赖范围。默认值为 compile。
  • optional:标记依赖是否可行。
  • exclusion:用来排除传递性依赖。

依赖范围

依赖范围与 classpath 的关系

依赖范围(scope) 对于编译 classpath 有效 对于测试 classpath 有效 对于运行时 classpath 有效 例子
compile Y Y Y spring-core
test -- Y -- JUnit
provided Y Y -- servlet-api
runtime -- Y Y JDBC 驱动实现
system Y Y -- 本地的,Mave 仓库之外的类库文件。慎用!
import 导入依赖范围。不会对三种 classpath 产生实际的影响。

传递性依赖

何为传递性依赖

A 有一个 compile 范围的 B 依赖,B 有一个 compile 范围的 C 依赖,那么 C 就会成为 A 的 compile 范围依赖,C 是 A 的一个传递性依赖。


image.png

依赖性传递和依赖范围

最左一列表示第一直接依赖范围,最上面一行表示第二直接依赖,中间的交叉单元格表示传递性依赖范围。

compile test provided runtime
compile compile -- -- runtime
test test -- -- test
provided provided -- provided provided
runtime runtime -- -- runtime

依赖调节

依赖调节原则

  • 第一原则:路径最近者优先
    如:A -> B -> C -> X(1.0)、A -> D -> X(2.0),则X(2.0)会被解析使用。
  • 第二原则:第一声明原则(Maven 2.0.9 开始)
    如:A -> B -> X(1.0)、A -> C -> X(2.0),依赖路径长度相同时,使用在 POM 中依赖声明最靠前的依赖。

可选依赖

根据传递性依赖中的例子:

A 有一个 compile 范围的 B 依赖,B 有一个 compile 范围的 C 依赖,那么 C 就会成为 A 的 compile 范围依赖,C 是 A 的一个传递性依赖。

如果 C 是可选依赖(optional=true),则依赖 C 将不会传递给 A。下图中的 X、Y 可设为 C。


image.png
<?xml version="1.0" encoding="UTF-8"?>
<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.0</modelVersion>

    <groupId>com.juvenxu.mvnbook.account</groupId>
    <artifactId>project-b</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.10</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>8.4-701.jdbc3</version>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

排除依赖

image.png

相关文章

  • Maven学习笔记

    阅读《Maven实战》许晓斌的一些笔记,便于自己和道友查阅 maven依赖 maven具有传递性依赖,比如 A 依...

  • Maven实战笔记-依赖

    依赖配置 根元素 project 下的 dependencies 可以包含一个或者多个 dependency 元素...

  • Maven私服实战

    Maven私服实战 前置依赖 JDK Maven 下载 Nexus Repository Manager OSS ...

  • Maven实战之初识Maven

    Maven实战之初识Maven Maven的简单介绍 作用:Maven主要用于项目的构建,管理项目的依赖以及项目的...

  • RocketMQ Hello

    《RocketMQ实战与原理解析》 Maven依赖 发送消息 接收消息

  • RabbitMQ高级整合应用-1、整合Spring AMQP,S

    RabbitMQ整合Spring AMQP 1.1RabbitAdmin 代码实战 maven依赖 然后新建一个配...

  • Maven 常用命令

    Maven常用库&依赖 Maven库:http://repo2.maven.org/maven2/Maven依赖查...

  • jenkins自动发布java代码

    继jenkins笔记(1)进行实战java代码发布,此利用github私有仓库拉去,jenkins利用maven编...

  • Maven学习笔记(二):Maven依赖

    依赖是Maven中最关键的部分,使用Maven管理项目很大的原因是因为他的依赖管理功能。 全部章节传送门:Mave...

  • Maven实战之坐标及依赖

    Maven实战之坐标及依赖 坐标 坐标的含义 现实生活中的坐标是用来定义一个地点的,Maven中的坐标是用来定义一...

网友评论

      本文标题:Maven实战笔记-依赖

      本文链接:https://www.haomeiwen.com/subject/swzgxktx.html