当前位置: 首页 > news >正文

07测试Maven中依赖的范围,依赖的传递原则,依赖排除的配置

依赖的特性

scope标签dependencies/dependency标签内,可选值有compile(默认值),test,provided,system,runtime,import

  • compile:在项目实际运行时真正要用到的jar包都是以compile的范围进行依赖 ,比如第三方框架SSM所需的jar包
  • test:测试过程中使用的jar包通常以test的范围依赖进来 , 比如junit依赖
  • provided:在开发过程中需要用到的“服务器上的 jar 包”通常以provided的范围依赖进来 , 比如 servlet-api、jsp-api

测试依赖的范围

测试compile , test , provided三种依赖范围的对比

  • provided范围的jar包不参与部署不放进war包,这样可以避免和服务器上已有的同类jar包产生冲突,同时减轻服务器的负担
main目录(空间)test目录(空间)开发过程(时间)部署到服务器(时间)
compile有效有效有效有效(参与打包)
test无效有效有效无效(不参与打包)
provided有效有效有效无效(不参与打包)

验证compile范围对main/test目录有效: 判断main/test目录下的某个类是否可以使用以compile范围导入的pro01--maven-java依赖中的Calculator类

  • 在HelloServlet/CalculatorTest类中可以导入Calculator类并且编译成功说明有效

验证test范围对main目录无效: 在主体程序Calculator中导入org.junit.Test这个注解,执行Maven编译命令失败说明无效

[ERROR] /D:/maven-workspace/space201026/pro01-maven-java/src/main/java/com/atguigu/maven/Calculator.java:程序包org.junit不存在

验证test和provided范围不参与服务器部署: 通过compile范围依赖的jar包会放入war包,通过test范围依赖的jar包不会放入war包

验证provided范围对test目录有效: 在pro02-maven-web的测试程序CalculatorTest中使用servlet-api.jar包中的类,执行Maven编译命令成功说明有效

package com.atguigu.maven;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;
import org.junit.Test;
import com.atguigu.maven.Calculator;
// 静态导入的效果是将Assert类中的静态资源导入当前类
// 这样一来,在当前类中就可以直接使用Assert类中的静态资源,不需要写类名
import static org.junit.Assert.*;
public class CalculatorTest{@Testpublic void testSum(){//....}
}

测试依赖的传递性

传递的原则: 在A依赖B,B依赖C的前提下,在A没有配置对C的依赖的情况测试C是否能够传递到A

  • B对C的依赖范围是compile范围那么C可以传递
  • B对C的依赖范围是test或provided范围那么C不可以传递,所以需要这样的jar包时,就必须在需要的地方明确配置依赖才可以
  • C是否能够传递到A取决于B依赖C时使用的依赖范围,与A依赖B时的范围无关,即使A是对B的依赖范围是test/provided范围,C该传递还是能传递

验证compile范围的依赖可以传递: 编辑pro01-maven-java工程根目录下pom.xml文件, 让当前工程可以使用commons-logging依赖中的类

  • spring-core依赖对commons-logging依赖范围是compile范围,所以commons-logging依赖可以传递
  • 修改了本地工作空间的pro01-maven-java的pom.xml文件 , 需要需要使用Maven命令重新生成pro01-maven-java的XXX.pom文件然后存入到本地仓库
  • 使用mvn dependency:tree/list命令查看pro01-maven-java工程可以使用的依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency><!--默认以compile范围导入spring-core依赖--><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.0.0.RELEASE</version>
</dependency>
[INFO] com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT
#junit对hamcrest-core的依赖范围是compile,所以可以传递
[INFO] +- junit:junit:jar:4.12:test
#这里显示test是因为我们是以test范围引入的junit,并不是说junit对hamcrest-core的依赖范围是test
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:test
[INFO] \- org.springframework:spring-core:jar:4.0.0.RELEASE:compile
[INFO] 	 \- commons-logging:commons-logging:jar:1.1.1:compile

pro02-maven-web工程也可以使用commons-logging依赖中的类

  • pro01-maven-java对spring-core依赖的范围是compile其可以传递, spring-core对commons-logging的依赖范围是compile其可以传递
  • 使用mvn dependency:tree命令查看pro02-maven-web工程可以使用的依赖
<!--依赖pro01-maven-java的-->
<dependency><groupId>com.atguigu.maven</groupId><artifactId>pro01-maven-java</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope>
</dependency>
> [INFO] com.atguigu.maven:pro02-maven-web:war:1.0-SNAPSHOT,
> [INFO] \- com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile
> [INFO]   \- org.springframework:spring-core:jar:4.0.0.RELEASE:compile
> [INFO]     \- commons-logging:commons-logging:jar:1.1.1:compile

验证test范围不能传递依赖: 在pro01-maven-java加入了的junit依赖,但是在pro02-maven-web工程中查看依赖树的时候并没有看到junit

<--当前工程是pro01-maven-java-->
<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version> <scope>test</scope></dependency>
</dependencies>

验证provided范围不能传递依赖: 在pro01-maven-java工程中加入了servlet-api的依赖, 但是在pro02-maven-web工程中查看依赖树的时候并没有看到该依赖

<--当前工程是pro01-maven-java-->
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope>
</dependency>
> [INFO] com.atguigu.maven:pro02-maven-web:war:1.0-SNAPSHOT
> [INFO] \- com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile
> [INFO]   \- org.springframework:spring-core:jar:4.0.0.RELEASE:compile
> [INFO]     \- commons-logging:commons-logging:jar:1.1.1:compile

配置依赖排除

当A依赖B,B依赖C而且C可以传递到A的时候,A如果不想要C,可以使用exclude标签在A里面把C排除掉(阻止某些jar包的传递可以避免jar包之间的冲突)

在这里插入图片描述

配置对commons-logging依赖的排除: 使用exclude标签指定要排除的具体的坐标并且不需要写版本号 , 只会阻止依赖传递到当前工程不影响其他依赖的传递

<dependency><groupId>com.atguigu.maven</groupId><artifactId>pro01-maven-java</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope><!--使用excludes标签配置依赖的排除--><exclusions><!--在exclude标签中配置一个具体的排除 --><exclusion><!--指定要排除的依赖的坐标(不需要写version)--><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions>
</dependency>

运行mvn dependency:tree命令发现pro02-maven-web工程下的spring-core依赖下面已经没有commons-logging依赖

[INFO] com.atguigu.maven:pro02-maven-web:war:1.0-SNAPSHOT
[INFO] \- com.atguigu.maven:pro01-maven-java:jar:1.0-SNAPSHOT:compile
[INFO] 	  \- org.springframework:spring-core:jar:4.0.0.RELEASE:compile

相关文章:

07测试Maven中依赖的范围,依赖的传递原则,依赖排除的配置

依赖的特性 scope标签在dependencies/dependency标签内,可选值有compile(默认值),test,provided,system,runtime,import compile&#xff1a;在项目实际运行时真正要用到的jar包都是以compile的范围进行依赖 ,比如第三方框架SSM所需的jar包test&#xff1a;测试过程中使用的j…...

科技为饮食带来创新,看AI如何打造智能营养时代

在当今社会&#xff0c;快节奏的生活方式、便捷的食品选择以及现代科技的快速发展正深刻地重塑着我们对健康的认知和实践&#xff0c;它已经不再仅仅是一个话题&#xff0c;而是一个备受关注的社会焦点。在这个纷繁复杂的交汇点上&#xff0c;AI技术的介入为我们开辟了前所未有…...

软件测试知识库+1,5款顶级自动化测试工具推荐和使用分析

“工欲善其事必先利其器”&#xff0c;在自动化测试领域&#xff0c;自动化测试工具的核心地位不容置疑的。目前市面上有很多可以支持接口测试的工具&#xff0c;在网上随便一搜就可以出来很多&#xff0c;利用自动化测试工具进行接口测试&#xff0c;可以很好的提高测试效率&a…...

代码随想录算法训练营第23期day22|669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

目录 一、&#xff08;leetcode 669&#xff09;修剪二叉搜索树 二、&#xff08;leetcode 108&#xff09;将有序数组转换为二叉搜索树 三、&#xff08;leetcode 538&#xff09;把二叉搜索树转换为累加树 一、&#xff08;leetcode 669&#xff09;修剪二叉搜索树 力扣题…...

IDEA中创建Web工程流程

第一步&#xff1a;File--》New--》Project 第二步&#xff1a;填写信息&#xff0c;点击Create 第三步&#xff1a;点击File,点击Project Structure 出现该界面 选择相应的版本&#xff0c;这里我用jdk17&#xff0c;点击apply &#xff0c;点击ok 第三步&#xff1a;右键文件…...

【论文阅读】基于卷积神经的端到端无监督变形图像配准

&#x1f4d8;End-to-End Unsupervised Deformable ImageRegistration with a Convolutional NeuralNetwork &#x1f4d5;《基于卷积神经的端到端无监督变形图像配准》 文章目录 摘要 Abstract. 1.导言 Introduction 附录 References未完待续 to be continued ... 摘要 Abstr…...

【Rust】包和模块,文档注释,Rust格式化输出

文章目录 包和模块包 CrateRust 的标准目录结构 模块 Module用路径引用模块使用super引用模块使用self引用模块结构体和枚举的可见性 使用 use 引入模块及受限可见性基本引入方式绝对路径引入模块相对路径引入模块中的函数 避免同名引用 注释和文档文档注释包和模块级别的注释注…...

leetcode221.最大正方形

最大正方形 可以使用动态规划降低时间复杂度。用 dp(i,j) 表示以 (i,j)为右下角&#xff0c;且只包含 111 的正方形的边长最大值。能计算出所有 dp(i,j)的值&#xff0c;那么其中的最大值即为矩阵中只包含 111 的正方形的边长最大值&#xff0c;其平方即为最大正方形的面积。 …...

低代码技术这么香,如何把它的开发特点发挥到极致?

前言 什么是低代码技术&#xff1f; 低代码是一种可视化软件开发方法&#xff0c;通过最少的编码更快地交付应用程序。图形用户界面和拖放功能使开发过程的各个方面自动化&#xff0c;消除了对传统计算机编程方法的依赖。 文章目录 前言低代码平台怎么选&#xff1f;用友Yonbu…...

drawio简介以及下载安装

drawio简介以及下载安装 drawio是一款非常强大的开源在线的流程图编辑器&#xff0c;支持绘制各种形式的图表&#xff0c;提供了 Web端与客户端支持&#xff0c;同时也支持多种资源类型的导出。 访问网址&#xff1a;draw.io或者直接使用app.diagrams.net直接打开可以使用在线版…...

Sql Server 数据库中的所有已定义的唯一约束 (列名称 合并过了)

查询Sql Server Database中的唯一约束 with UniqueBasic as (SELECTtab.name AS TableName, -- 表名称idx.name AS UniqueName, -- 唯一约束的名称col.name AS UniqueFieldName -- 唯一约束的表字段FROMsys.indexes idxJOIN sys.index_columns idxColON (idx.object_id idxCo…...

elasticsearch (六)filebeat 安装学习

filebeat 安装&#xff1a;文件节拍快速入门&#xff1a;安装和配置 |文件节拍参考 [7.17] |弹性的 (elastic.co) 解压缩后&#xff0c;以配置nginx日志为例。 Nginx module | Filebeat Reference [7.17] | Elastic filebeat 配置中&#xff0c; - module: nginx access: …...

算法通关村第一关|青铜|链表笔记

1.理解 Java 如何构造出链表 在 Java 中&#xff0c;我们创建一个链表类&#xff0c;类中应当有两个属性&#xff0c;一个是结点的值 val &#xff0c;一个是该结点指向的下一个结点 next 。 next 通俗讲是一个链表中的指针&#xff0c;但是在链表类中是一个链表类型的引用变量…...

【记录】使用Python读取Tiff图像的几种方法

文章目录 PIL.Imagecv2gdal 本文总结了使用 PIL Image, cv2, gdal.Open三种python package 读取多通道Tiff格式遥感影像的方法。 PIL.Image PIL对Tiff只支持两种格式的图像&#xff1a; 多通道8bit图像单通道int16, int32, float32图像 多通道多bit的tiff图像PIL不支持读取…...

JOSEF约瑟 多档切换式漏电(剩余)继电器JHOK-ZBL1 30/100/300/500mA

系列型号&#xff1a; JHOK-ZBL多档切换式漏电&#xff08;剩余&#xff09;继电器&#xff08;导轨&#xff09; JHOK-ZBL1多档切换式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBL2多档切换式漏电&#xff08;剩余&#xff09;继电器 JHOK-ZBM多档切换式漏电&#xf…...

Linux部署kubeedge 1.4

文章目录 一、机器信息二、环境准备&#xff08;所有节点操作&#xff09;2.1. 修改主机名2.2. 开启路由转发2.3.安装Docker&#xff08;所有节点&#xff09;2.4.部署K8S集群(单机版&#xff0c;云端节点) 2.5.安装Mosquitto&#xff08;只在边缘节点安装)三、安装kubeedge 1.…...

第一章习题

文章目录 x ( t ) j e j w 0 t x(t)je^{jw_0t} x(t)jejw0​t x [ n ] j e j w 0 n x[n]je^{jw_0n} x[n]jejw0​n 求基本周期&#xff1a; T 2 Π w 0 T\frac{2Π}{w_0} Tw0​2Π​ 对x[n],T为有理数才算 1、求信号x(t)2cos(10t1)-sin(4t-1)的基波周期 2 Π 10 Π 5 \frac{2…...

nvm、node、npm解决问题过程记录

在Windows10如何降级Node.js版本&#xff1a;可以尝试将Node.js版本降级到一个较旧的版本&#xff0c;以查看问题是否得以解决。可以使用Node Version Manager (nvm) 来轻松切换Node.js版本&#xff0c;具体完整步骤&#xff1a; 首先&#xff0c;需要安装Node Version Manager…...

Linux- DWARF调试文件格式

基本概念 DWARF是一个用于在可执行程序和其源代码之间进行关联的调试文件格式。当开发者使用调试编译选项&#xff08;例如&#xff0c;使用gcc时的-g标志&#xff09;编译程序时&#xff0c;编译器会生成这种格式的调试信息。这些信息在后续的调试过程中非常有用&#xff0c;…...

软件工程第六周

软件体系结构概述 体系结构&#xff1a;一种思想&#xff0c;而框架就是思想的实现&#xff0c;设计模式就是根据某一特殊问题实现的框架。 体系结构&#xff1a;体系结构是软件系统的高级结构。它定义了系统的主要组成部分&#xff0c;以及这些部分之间的关系和交互方式。 框…...

从High-NA EUV到波长微缩:半导体光刻技术的未来路径与核心挑战

1. 从0.33 NA到High-NA EUV&#xff1a;我们走到了哪一步&#xff1f;EUV光刻技术从实验室走向大规模量产&#xff0c;这中间的十几年&#xff0c;可以说是半导体行业里最惊心动魄的技术长征之一。2018年那会儿&#xff0c;行业还在为EUV光源的功率能不能突破250瓦而焦虑&#…...

ArchivePasswordTestTool:5分钟掌握加密压缩包密码恢复的智能方案

ArchivePasswordTestTool&#xff1a;5分钟掌握加密压缩包密码恢复的智能方案 【免费下载链接】ArchivePasswordTestTool 利用7zip测试压缩包的功能 对加密压缩包进行自动化测试密码 项目地址: https://gitcode.com/gh_mirrors/ar/ArchivePasswordTestTool 你是否曾因遗…...

如何快速将STL转换为STEP:5个高效转换技巧指南

如何快速将STL转换为STEP&#xff1a;5个高效转换技巧指南 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp STL到STEP格式转换是3D设计和工程制造领域的关键桥梁&#xff0c;而stltostp正是解决…...

从Kaggle竞赛到现实应用:聊聊ResNet18在驾驶安全监控中的潜力与局限

从Kaggle竞赛到现实应用&#xff1a;ResNet18在驾驶安全监控中的潜力与局限 当计算机视觉技术走出实验室&#xff0c;真正进入驾驶安全监控这样的关键场景时&#xff0c;我们需要思考的远不止模型在测试集上的准确率。ResNet18作为轻量级深度网络的代表&#xff0c;其在Kaggle竞…...

9.实战案例拆解

好的,我们开始。先别急着看那些“月入十万”的爽文,我这边先给你看一段我昨晚在调试一个树莓派Pico W的I2C总线时,在终端里敲出来的报错信息: [ERROR] I2C timeout: SDA line held low by device at 0x3C这条错误让我折腾了半小时。最后发现是传感器模块的电源纹波太大,导…...

Cursor Free VIP破解工具:终极免费方案解决AI编程助手试用限制

Cursor Free VIP破解工具&#xff1a;终极免费方案解决AI编程助手试用限制 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached …...

AI智能体集成Telegram:双模式MCP服务器原理与实战部署

1. 项目概述 如果你正在为你的AI助手&#xff08;比如Claude、Cursor的Composer&#xff0c;或者其他支持MCP协议的智能体&#xff09;寻找一个功能强大、接入灵活的Telegram集成方案&#xff0c;那么你很可能已经厌倦了那些功能单一、配置复杂的传统机器人框架。今天要聊的这…...

人工智能-现代方法(一)

2026.05.12 这几天开始看《人工智能-现代方法》&#xff0c;做一些知识记录。 1、学习的概念&#xff1a;归纳和演绎。&#xff08;19章&#xff09; 演绎靠逻辑推理&#xff0c;归纳靠经验总结。所以在前提正确的情况下&#xff0c;演绎的结论必然正确。归纳的结论则有可能出现…...

GraphQL在后端开发中的应用与优势

在现代后端开发领域&#xff0c;GraphQL作为一种新兴的API查询语言&#xff0c;正迅速改变着开发者构建和交互数据的方式。与传统的RESTful API相比&#xff0c;GraphQL提供了一种更灵活、高效的数据获取机制&#xff0c;使前端能够精准地请求所需数据&#xff0c;避免了过度获…...

2026年最值得投入的5款AI Agent工具:Gartner认证+生产环境压测数据全公开

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;2026年最佳AI Agent工具推荐 2026年&#xff0c;AI Agent 已从概念原型迈入企业级生产部署阶段。开发者不再满足于单任务自动化&#xff0c;而是追求具备长期记忆、跨平台协调与自主目标分解能力的智能…...