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

Java学习路线:Maven(二)scope、optional和exclusions

目录

scope

optional

exclusions


我们知道,一般来说一个依赖由三个基本的属性作为定位坐标,即groupId、artifactId和version

除了这三个基本属性以外,依赖还可以添加其他的属性,例如scope、optional和exclusions等

这篇文章将对这几种属性进行介绍

scope

scope决定了依赖作用的范围,就和注解中的Retention相似

scope有以下几种值:

  • compile:默认值,表示依赖在编译、运行、测试时均有效
  • provided:在编译、测试时有效,运行时无效
  • runtime:在运行、测试时有效,编译时无效
  • test:只在测试时有效

以上四种值都针对于在远程仓库中下载的依赖

那如果我们使用的依赖没有上传远程仓库,只是一个本地的jar包应该怎么办呢?

这种情况可以使用第五种作用域:

  • system:和provided作用域一样,但是不是从远程仓库获取,而是直接导入本地jar包

如果使用system,需要增加一个属性systemPath来找到本地jar包的地址

<dependency>
   <groupId>org.junit.xxx</groupId>
   <artifactId>xxx</artifactId>
   <version>5.11.3</version>
   <scope>system</scope>
   <systemPath>C://user/test.jar</systemPath>
</dependency>

optional

当某个依赖的 optional 设置为true时,Maven 不会自动将该依赖传递给依赖于当前项目的其他项目

<optional>true</optional>

optional主要应用于传递依赖,例如,你的项目 A 依赖于 B,B 又依赖于 C,那么 A 也会自动依赖于 C,但是当C被设置为optional后,在A项目中导入B时,C不会被自动导入

exclusions

exclusions 用于排除传递性依赖,即阻止特定的依赖自动传递到项目中。

例如,假设项目依赖 spring-core,而 spring-core 默认依赖 commons-logging。如果想排除 commons-logging,可以这样配置:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>5.2.0.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

可以这样理解optional和exclusions:

  • optional:由发送方(依赖方)声明这个依赖是“可选的”,告诉 Maven 不要自动传递这个依赖给下游项目
  • exclusions:由接收方(依赖的使用方)声明不想要某些传递性依赖,从而“拒绝”这些依赖被引入项目中


http://www.kler.cn/a/382598.html

相关文章:

  • 【docker】6. 镜像仓库/镜像概念
  • 汇聚全球前沿科技产品,北京智能科技产业展览会·世亚智博会
  • Hugging Face 两种加载模型的方式有什么区别
  • 【含文档+源码】基于SpringBoot+Vue的新型吃住玩一体化旅游管理系统的设计与实现
  • Oracle视频基础1.4.5练习
  • 【ONLYOFFICE文档】8.2版本测评
  • Late Chunking×Milvus:如何提高RAG准确率
  • C++ 新手指南:如何使用 set 和 unordered_set
  • 2024年10月个人工作生活总结
  • 【网络】传输层协议TCP(下)
  • Android笔记(三十五):用责任链模式封装一个App首页Dialog管理工具
  • javaweb基于springboot社区养老服务管理系统
  • 【Linux】——操作系统-进程详解
  • 使用 Flutter 绘制一个棋盘
  • 通讯录(C 语言)
  • Java基础概览和常用知识(二十)
  • rclone 挂载是否会占用服务器的存储
  • 【c++语言程序设计】字符串与浅层复制(深拷贝与浅拷贝)
  • 《高等学校化学学报》
  • python 语法
  • 《质谱学报》
  • C++类和对象上
  • wps的Excel中使用条件格式
  • BM25:最佳匹配 ,文本相关性评分算法
  • 机器学习—代码中的推理
  • 【RabbitMQ】03-交换机