如何在没有硬连接第三方依赖项的情况下在共享库中实现 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 异常。如果你只做一次这个测试,费用是合理的。
我正在编写 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 异常。如果你只做一次这个测试,费用是合理的。