我应该创建一个新的 spring-boot starter 还是使用可选的依赖项?

Should I create a new spring-boot starter or use optional dependencies?

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

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

当前的 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 模块的依赖关系。

您可能希望将 jodconverter-localjodconverter-online 的依赖项设为可选,您只需要在 Gradle 构建文件中将关键字 compile 替换为 compileOnly

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

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

至于 AutoConfigurations,我看不出您所做的有任何问题,因为您使用 @ConditionalOnClass 仅在 class 上存在相应的 class 时才触发 AutoConfiguration =]路径。