maven optional 功能详解

前言

最近参与了一个项目,使用maven管理依赖.项目拆分了很多模块.然后交个多个团队各自开发.最后在一个项目骨架中,把各自的模块引入进来,一起启动.

后来随着项目的深入.引入的jar包变多.发现

jar包太多,编译太慢,

打包之后的war包非常大.

这种情况就可以使用optional来优化

什么是optional

optional是maven依赖jar时的一个选项,表示该依赖是可选的.不会被依赖传递

xml 复制代码
<optional>true</optional>

使用场景

以项目中使用到的日志框架为例.

例如

B 依赖了日志框架 logbacklog4japache commons log

这时候的依赖关系如下 A-> B (A依赖B)

因为maven有依赖传递机制.那么A项目就会有3个jar包,logbacklog4japache commons log.实际上我们一般只会在项目中使用一种日志框架.那么我们项目中就会有多余的依赖.当这种情况时越来越多时,最后整个项目的jar包就有很多的多余依赖,导致项目很臃肿.

如何优化

只要B项目中把logback、log4japache commons log设置成<optional>true</optional>

例如
xml 复制代码
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <optional>true</optional>
</dependency>

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <optional>true</optional>
</dependency>

这时候A项目依赖B的时候,项目中不会有logbacklog4japache commons log jar包,可以根据情况自行选择一个即可.

总结

当你开发的组件时,有一个功能,有多种实现方式的jar可以提供,但是实际只会使用一种的情况下.可以把实现的jar包设置成<optional>true</optional>.表示: 瞧,你依赖我时,用到这个功能时,可以自行选择.而不是默认全部都给你.管你用不用.

为什么要使用optional

减少不必要的依赖传递

减少jar包冲突

原理

引入了optional实际上默认会做排除操作

复制代码
It may be helpful to think of optional dependencies as "excluded by default
参考资料

http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

相关推荐
Rick19939 小时前
rabbitmq, rocketmq, kafka这三种消息如何分别保住可靠性,顺序性,以及应用场景?
kafka·rabbitmq·rocketmq
有梦想的小何1 天前
从0到1搭建可靠消息链路:RocketMQ重试 + Redis幂等实战
java·redis·bootstrap·rocketmq
鬼先生_sir2 天前
SpringCloud-Stream + RocketMQ/Kafka
spring cloud·kafka·rocketmq·stream
小江的记录本6 天前
【RocketMQ】RocketMQ核心知识体系全解(5大核心模块:架构模型、事务消息两阶段提交、回查机制、延迟消息、顺序消息)
linux·运维·服务器·前端·后端·架构·rocketmq
__土块__7 天前
一次支付清结算系统线程池故障复盘:从任务积压到异步解耦的架构演进
java·消息队列·rocketmq·线程池·支付系统·故障复盘·异步架构
-南帝-8 天前
RocketMQ2.3.5+SpringBoot 3.2.11+ java17安装-集成-测试案例
java·spring boot·rocketmq
zs宝来了8 天前
RocketMQ 存储原理:CommitLog 与 ConsumeQueue 设计
rocketmq·存储·commitlog·consumequeue
饺子大魔王的男人9 天前
Linux 下 Apache RocketMQ 部署与公网访问实现指南
linux·apache·rocketmq
qq_40999093?13 天前
消息中间件:RabbitMQ、RocketMQ、Kafka快速上手
kafka·rabbitmq·rocketmq
羑悻的小杀马特15 天前
从入门到稳定运行:RocketMQ 5.3.4 单机版安装与开机自启配置详解
运维·服务器·rocketmq