美文网首页
maven使用小技巧-optional

maven使用小技巧-optional

作者: Learn_Java | 来源:发表于2020-06-13 10:15 被阅读0次

maven optional

前言

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

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

  • jar包太多,编译太慢
  • 打包之后的war包非常大

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

什么是optional

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

<optional>true</optional>

使用场景

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

例如

  • B依赖了日志框架 logback、log4j、apache commons log
  • 这时候的依赖关系如下 A->B

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

如何优化

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

例如

<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的时候,项目中不会有logback、log4japache commons log jar包,可以根据情况自行选择一个即可.

总结

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

为什么要使用optional

  • 减少不必要的依赖传递
  • 减少jar包冲突

原理

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

It may be helpful to think of optional dependencies as "excluded by default

参考资料

相关文章

  • maven使用小技巧-optional

    maven optional 前言 最近参与了一个项目,使用maven管理依赖.项目拆分了很多模块.然后交个多个团...

  • Java 1.8 Optional 使用技巧

    Java Optional 使用技巧 最近发现有人在讨论 Optional 的出现很鸡肋,但我不这么认为。虽然Op...

  • Swift学习-技巧

    技巧1-如何正确的定义一个类常量或类变量 技巧2-使用Optional来避免异常指针问题 技巧3-如何使用swif...

  • Maven: optional dependencies and

    Introduction This section discusses the functionality of ...

  • maven中optional

    How do optional dependencies work? The diagram above says...

  • maven optional 属性

    有些时候 我们我们自己的jar需要引用一些别的组件,但是提供给别人调用时 别人其实用不上这部分功能,但是因为你自己...

  • java8的流库(二)Optional类型

    大纲: 如何使用Optional的值 不适合使用Optional值的方式 创建Optional的值 用flatMa...

  • Spring 控制反转

    获取 Spring 话说在调试 Maven 的时候发现使用 Maven 导入包很慢,几经周折发现了一些技巧。简直 ...

  • Boost.Optional的用法

    不使用boost::optional时的方法: 使用boost::optional时的方法: 参考文章 https...

  • java 8 Optional

    Optional 本章内容 如何为缺失的值建模 Optional 类 应用Optional的几种模式 使用Opti...

网友评论

      本文标题:maven使用小技巧-optional

      本文链接:https://www.haomeiwen.com/subject/csfatktx.html