如何在没有硬连接第三方依赖项的情况下在共享库中实现 JSON 功能

How to implement JSON functionality in a shared library without hard-wiring third party dependencies

我正在编写 class 以提供一些 JSON 格式的日志输出。

一个问题是我从事的各种 Java 项目已经使用 JSON 并且依赖于 gson 或 Jackson 等第三方库。

class 需要执行的工作非常小,我认为应该很容易避免对任何特定的 JSON 库创建新的依赖项,类似于 SLF4j,它可以获取任何日志记录框架已经存在。

我的计划是 class 会选择一个 JSON 引擎并使用它,或者在启动时抛出 "missing JSON library" 异常。

这个已经存在了吗?我在网上找不到任何东西。

JavaJDK服务商java.util.ServiceLoader合适吗?

当我用它插入一个 java.nio.file.spi.FileTypeDetector 用于 Apache Tika 的 mime 类型检测时,它似乎很容易实现(最好在这个 useful blog post 上解释。

您可以尝试 Class.forName(),为 Gson、Jackson 或正在使用的任何其他 JSON 库传递核心 class 的全名。如果 class 不在 class 路径上,您将得到 ClassNotFound 异常。如果你只做一次这个测试,费用是合理的。