欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > Java学习路线:Maven(二)scope、optional和exclusions

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

2025/4/19 20:30:29 来源:https://blog.csdn.net/LUwantAC/article/details/143567762  浏览:    关键词: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:由接收方(依赖的使用方)声明不想要某些传递性依赖,从而“拒绝”这些依赖被引入项目中

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词