maven | optional | 犀牛的博客
source link: https://benpaodewoniu.github.io/2023/01/30/maven9/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
maven | optional
optional
元素。
这里以 Spring Boot
项目中的使用为例,比如我们在项目中经常使用的热部署组件 spring-boot-devtools
,就可以使用 optional
元素来进行定义,对应 pom
文件中配置如下:
<!--devtools 热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
那么,这里的 optional
元素设置为 true
表示何意?optional
是 Maven
依赖 jar
时的一个选项,表示该依赖是可选的,项目之间依赖不传递。不设置 optional
(默认)或者 optional
是 false
,表示传递依赖。
文字描述可能比较抽象,下面用具体实例场景来进行更直观的描述,这里假设有两个项目 A
和 B
,其中A
为父项目,B
为子项目。在父项目中引入了单元测试的依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
下面针对 optional
元素的不同值进行讲解。
optional元素默认值(false)
当父项目添加 junit
依赖时,并未添加 optional
选项,也就是默认的 optional
元素的值为 false
。
此时,当子项目依赖父项目时,父项目A
和子项目B
的关系如下:
父项目并未设置 optional
元素为 true
,那么便具有依赖传递性。此时,子项目 B
中会直接引入父项目 A
中引入的 Junit
的 jar
包。也就是说B项目打包时,jar/war
包中会包含 junit
的 jar
包。
optional元素为true
当父项目引入 junit
依赖时,设置 optional
元素为 true
。那么,子项目B
便有了更多的选择。
如果项目B
不需要Junit
的jar
包,那么在其pom
文件中不需进行任何处理便可以。如果B
项目也需要对应的jar
包依赖,可以有两种选择:第一、A
项目中对应依赖的optional
设置为false
或去掉;第二、B
项目中直接引入需要的该依赖。
parent继承的情况
我们经常会在parent
项目中配置统一的依赖版本控制,如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>
此时,如果B项目需要 Junit
的 jar
包,可以直接在项目中引入,这里父项目中的 optional
配置对子项目并无影响。
综上所述,在 Maven
项目中,恰当的使用 optional
配置,可以在很大程度上减少jar
包的大小,提升编译和发布速度。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK