我们正在构建一个公共组件,它是多个其他项目的依赖项。
我们的项目做了一些 XSLT 转换,我们需要使用 Saxon 引擎。
我们可以完全控制必须使用 Saxon 的特定 XSLT 转换,但无法控制依赖于我们的应用程序的类路径,并且我们不想强迫它们使用 Saxon 进行其他 XML 工作。
我们可以在使用这些工厂提供的 API 进行转换时直接手动调用 Saxon 库。
问题是 Saxon 使用该ServiceLoader
模式将自己作为TransformerFactory
实现注入,使用 jar 中的此文件:
[saxon.jar]/META-INF/services/javax.xml.transform.TransformerFactory
这意味着将我们用作依赖项的应用程序最终可能会使用 Saxon 而不是其现有的 XML 库。要求这些应用程序更改其代码以调用其特定实现不是一种选择。
有什么方法可以“覆盖” Saxon 库以删除 ServiceLoader 实现?使用 Maven、Java 或其他进程?