maven-依赖管理-上

依赖管理

依赖配置

一句话: 依赖指当前项目运行需要的jar,一个项目可以设置多个依赖

依赖的举例

<!-- 解读:
1. 这里就是引入项目需要的jar 包, 类似传统的import jar 的作用
2. 在dependencies 标签内,可以指定多个需要依赖的jar/导入的jar
3. 引入的jar 包需要一个完整的jar 包坐标,从mvn 仓库查询即可得到-->
<dependencies>
    <!-- 引入的一个具体的依赖jar, 包括一个完整的依赖坐标-->
    <dependency>
        <!-- 依赖的gruopid: 组织名-->
        <groupId>junit</groupId>
        <!-- 依赖的项目名-->
        <artifactId>junit</artifactId>
        <!-- 依赖的版本-->
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

依赖传递

直接依赖

一句话: 在当前项目中通过依赖配置建立的依赖关系

举例说明

  1. 创建maven_A java 项目

在这里插入图片描述

  1. 在maven_A 项目中引入mysql5.1.47 , 这时我们就说maven_A 项目直接依赖mysql5.1.47jar
<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
</dependencies>
  1. 如图

在这里插入图片描述

间接依赖

一句话: 当前项目直接依赖资源(比如m1), 而m1 又依赖资源(m2),我们就说当前项目间接依赖资源(m2)

举例说明

  1. 创建maven_B java 模块(为了好理解,我们放在一个项目中)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 修改D:\java_projects\maven_B\pom.xml , 引入junit4.12
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>
  1. 修改D:\java_projects\maven_A\pom.xml , 引入maven_B
<dependencies>
    <!-- 引入maven_B -->
    <dependency>
        <groupId>com.wyx</groupId>
        <artifactId>maven_B</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
</dependencies>
  1. 观察maven_A 和maven_B 的依赖情况

在这里插入图片描述

扫描二维码关注公众号,回复: 15745622 查看本文章

依赖冲突

路径优先

  1. 路径优先∶当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
  2. 示意图说明:

在这里插入图片描述

  1. 解释项目A 依赖情况
    1. 如果1 度资源有junit 4.1 , 而2 度资源有junit4.2
    2. 根据路径优先原则, 项目A 生效的是junit4.1
  2. 举例说明.
  1. 创建maven_C(为了方便观察,仍然放在一个项目中), 创建方式和maven_B 类似,就不截图了

在这里插入图片描述

  1. 修改D:\java_projects\maven_C\pom.xml, 引入junit4.13
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13</version>
    </dependency>
</dependencies>
  1. 修改D:\java_projects\maven_B\pom.xml, 引入maven_C
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         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.wyx</groupId>
    <artifactId>maven_B</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- 引入maven_C -->
        <dependency>
            <groupId>com.wyx</groupId>
            <artifactId>maven_C</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
</project>
  1. 刷新工程,看看maven_A 生效的就是路径优先的maven_B 的junit4.12

在这里插入图片描述

  1. 为了验证是哪个junit 生效了, 还可以通过代码来验证, 写一段代码D:\java_projects\maven_A\src\main\java\HelloTest.java

在这里插入图片描述

声明优先

  1. 声明优先∶当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
  2. 示意图说明:

在这里插入图片描述

图解项目A 依赖情况

  1. 如果1 度(灰框)资源有junit 4.1 , 而1 度(蓝框)资源有junit4.2
  2. 根据声明优先原则, 要看项目A , 在pom.xml 引入的顺序,先引入的就是生效的
  1. 举例说明.
  1. 创建maven_D(为了方便观察,仍然放在一个项目中), 创建方式和maven_B 类似,就不截图了

在这里插入图片描述

  1. 修改D:\java_projects\maven_D\pom.xml
<?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.wyx</groupId>
    <artifactId>maven_D</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
        </dependency>
    </dependencies>
</project>
  1. 修改D:\java_projects\maven_A\pom.xml
<?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.wyx</groupId>
    <artifactId>maven_A</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- 引入maven_D -->
        <dependency>
            <groupId>com.wyx</groupId>
            <artifactId>maven_D</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <!-- 引入maven_B -->
        <dependency>
            <groupId>com.wyx</groupId>
            <artifactId>maven_B</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
    </dependencies>
</project>

在这里插入图片描述

  1. 为了验证是junit4.13.2 生效还是junit4.12 生效, 写一段代码D:\java_projects\maven_A\src\main\java\HelloTest.java

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/apple_67445472/article/details/131710718