web框架编程实验二:Maven依赖管理

一、实验目标

理解Maven依赖传递方式,掌握Maven依赖管理。

二、实验内容

1、编写三级Maven Projects,命名为Top/Mid/Bot,实现自上而下的依赖,并结合自己的场景阐述直接依赖和间接依赖的相对关系;

2、在Maven中央仓库中检索某个依赖资源的多个版本,分别配置给三级Projects复现依赖资源版本冲突情形,而后结合自己的场景分别解释Maven中路径优先、声明优先、特殊优先的意义;

3、针对三级Projects目录分别设置可选依赖和排除依赖,并结合结果解释二者区别。

三、实验步骤

1.创建项目,编写三级Maven Projects。

  1. 打开 IntelliJ IDEA,点击 "New Project"。

  2. 选择 "Maven Archetype"。

  3. 选择“Archetype”,输入项目信息:

    • Group Id: org.example

    • Artifact Id: Top

    • Version: 1.0-SNAPSHOT

  4. 完成项目向导后,右键点击 Top 项目,选择 "New" > "Module"。

  5. 再次选择 "Maven",输入信息:

    • Artifact Id: Mid

    • 包括 Version: 1.0-SNAPSHOT

  6. 重复该步骤,为 Bot 创建另一个 Maven 模块,Artifact Id 设置为 Bot,parent设置为Mid

  7. 在Top的pom.xml中添加Mid的依赖

    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>Mid</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

  8. 在Mid的pom.xml中添加Bot的依赖

    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>Bot</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

2.阐述直接依赖和间接依赖的相对关系

  • 场景Top 是负责业务逻辑的模块,Mid 是处理数据访问的模块,而 Bot 则是基础工具和通用函数模块。

  • 直接依赖:指的是一个模块直接引用另一个模块的情况。在本例中,Mid 模块是 Top 的直接依赖,Bot 模块是 Mid 的直接依赖。在 Top 中调用 Mid 的某些功能,例如获取数据接口。

  • 间接依赖:当一个模块依赖于另一个模块,而这个另一个模块又依赖于第三个模块时,第一个模块就间接依赖于第三个模块。比如,在我们这个项目中,Top 间接依赖 Bot,因为 Top 依赖 Mid,而 Mid 又依赖 Bot

3.在Maven中央仓库中检索某个依赖资源的多个版本,分别配置给三级Projects复现依赖资源版本冲突情形

  • 选择依赖资源log4j

4.解释Maven中路径优先、声明优先、特殊优先的意义

        1. 路径优先

        在Bot中添加1.2.9版本的log4j,在Mid中添加1.2.12版本的log4j

  • 定义:Maven 会选择依赖树中最接近根项目的依赖版本。

  • 应用场景:如果 Mid 中引用的依赖 (例如 log4j) 在 Mid 中已被引用,那么 Mid 中的直接依赖就会受到影响。

  • 示例解读:如果 Mid 中需要 log4j 的版本是 1.2.12,而 Bot 引用的是 1.2.9Top 将使用 1.2.12,因为它在路径上更近。

  • 展示

        2. 声明优先

        在Bot中添加1.2.9版本的log4j,新建Bot2,添加1.2.12版本的log4j

  • 定义:Maven 在遇到路径长度相同的依赖时,会选择 pom.xml 中先声明的版本。

  • 应用场景:假如你在 Bot 中显式声明了 log4j:1.2.9,而在Bot2中声明log4j:1.2.12,那么 Bot 所声明的版本将会被优先选择。

  • 示例解读Mid 先声明Bot,再声明Bot2,则面对路径长度相同的依赖log4j时,优先选择1.2.9版本

  • 展示

        3. 特殊优先

  • 定义:当同一个project下有不同版本时,后配置的优先。

  • 应用场景:假如你在 Bot 中先声明了 log4j:1.2.9,又声明log4j:1.2.12,那么 后声明的版本将会被优先选择。

  • 展示

5.设置可选依赖和排除依赖

  • 排除依赖:在Top的pom.xml中添加exclusions,排除Bot,示例配置如下。

    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>Mid</artifactId>
            <version>1.0-SNAPSHOT</version>
            <exclusions>
             <exclusion>
                  <groupId>org.example</groupId>
                  <artifactId>Bot</artifactId>
             </exclusion>
         </exclusions>
        </dependency>
    </dependencies>

            

  • 可选依赖:在 Mid 的 pom.xml 关于 Bot 的依赖声明中使用 optional 元素,将其设置成可选依赖,示例配置如下。

    <dependencies>
        <dependency>
            <groupId>org.example</groupId>
            <artifactId>Bot</artifactId>
            <version>1.0-SNAPSHOT</version>
            <optional>true</optional>
        </dependency>
    </dependencies>

                 

6.结合结果解释二者区别

  • 排除依赖 VS 可选依赖

    • 排除依赖是控制当前项目是否使用其直接依赖传递下来的接间依赖;

    • 可选依赖是控制当前项目的依赖是否向下传递;

    • 可选依赖的优先级高于排除依赖;

    • 若对于同一个间接依赖同时使用排除依赖和可选依赖进行设置,那么可选依赖的取值必须为 false,否则排除依赖无法生效;

    • 可选依赖运用场景是自己开发的jar包,排除依赖是别人开发的jar包。

四、问题总结与体会

在这个实验中,遇到问题如下:

        1.对于使用IDEA创建Maven,编写三级目录不太熟悉。

        2.对于依赖优先级、排除依赖、可选依赖等概念在上课前没有了解。

以上问题均已解决。

通过这次实验令我收获了很多,对于Maven的理解有了进一步的加深,同时,对于课上所学知识也有了实践。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值