【问题标题】:Should I create a new spring-boot starter or use optional dependencies?我应该创建一个新的 spring-boot 启动器还是使用可选的依赖项?
【发布时间】:2018-02-20 14:25:53
【问题描述】:

我目前正在维护 jodconverter 项目的一个分支,该项目提供了一个 spring-boot-starter 模块,允许基于 spring-boot 的应用程序使用 Open/Libre Office 安装(在同一台服务器上)来自动化文档转化率。

现在,该项目已经发展壮大,并诞生了一个名为jodconverter-online 的新模块。该模块将向 LibreOffice Online 服务器发送转换请求,我现在想创建一个 spring-boot 启动器来支持这个新模块。

当前的 jodconverter-local(依赖于当前的 jodconverter-spring-boot-starter)与 jodconverter-online 模块的依赖关系不同。这就是为什么它们首先是两个独立的模块。

所以我的问题是:

我应该创建一个新的 jodconverter-online-spring-boot-starter 还是可以(以及如何)只修改当前的启动项目,根据用户的需要使依赖项成为可选的。

现在我把它全部放在current starter project(在 OSS 快照存储库中以 4.2.0-SNAPSHOT 的形式提供),但我这样做是错误的,因为它会自动添加两者的依赖项jodconverter-local 和 jodconverter-online 模块。

【问题讨论】:

    标签: spring-boot jodconverter spring-boot-starter


    【解决方案1】:

    您可能想让 jodconverter-localjodconverter-online 的依赖项成为可选的,您只需将关键字 compile 替换为 compileOnly 在您的Gradle 构建文件。

    显然,当依赖项变为可选时,开发人员将不得不选择其中一个选项并将其添加到他们项目的依赖项中(除了您的启动器)。

    如果唯一的附加依赖项是 jodconverter-localjodconverter-online,那没什么大不了的。但是,如果必须为每种情况添加更多依赖项,那么您可能会考虑创建一个新的 starter 来封装这些依赖项。

    至于 AutoConfigurations,我认为您所做的没有任何问题,因为您使用 @ConditionalOnClass 仅在类路径中存在相应的类时才触发 AutoConfiguration。

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 2019-08-31
      • 2016-06-29
      • 1970-01-01
      • 2020-11-09
      • 2018-06-10
      相关资源
      最近更新 更多