【问题标题】:How can I tell my application that it shouldn't use an external Service Provider from a jar?如何告诉我的应用程序它不应该使用 jar 中的外部服务提供程序?
【发布时间】:2011-06-20 14:24:51
【问题描述】:

出于某种原因,我们需要来自 Oracle XDK 的 xdb.jar。这个 jar 依赖于 xmlparserv2.jar。实际问题是 xmlparserv2.jar 带有一些提供程序配置文件(META-INF/services)。该 jar 具有 javax.xml.transform.TransformerFactoryjavax.xml.parsers.SAXParserFactoryjavax.xml.parsers.DocumentBuilderFactory 的服务提供程序.实现(来自 oracle.*)不能与我们软件的某些其他部分一起使用(它们需要标准工厂)。

【问题讨论】:

    标签: java jar classpath jnlp oracle-xdk


    【解决方案1】:

    您可以使用单独的类加载器将 jar 与应用程序的其余部分隔离开来。这个question 关于它。

    【讨论】:

      【解决方案2】:

      您可以从 xmlparserv2.jar 中删除这些类

      【讨论】:

      • 抱歉,这是不可能的。 xmlparserv2.jar 的许可证不允许这样做。而 xmlparserv2.jar 需要这些类。
      【解决方案3】:

      See here - “JNLP 类路径优先级 1.5 vs 1.6”

      【讨论】:

      • 谢谢,但这并不能解决我的问题。 xmlparserv2.jar 正在覆盖 jre 中的类。我无法在 jre 之前加载 xmlparserv2.jar。 (我可以吗?)
      • 这就是问题所讨论的内容 - 如何以及在什么版本下。
      • 好的,那我不太明白解决方法。 xmlparserv2.jar 包括以下包: org.xml.sax.* org.w3c.dom.* oracle.xml.* javax.xml.* 问题可能来自 javax.xml.* 包......我告诉运行时不要使用这部分 jar?
      【解决方案4】:

      我通过删除服务 (META-INF/services) 解决了这个问题。我们进行了单元测试,一切正常。甚至是依赖于 xmlparserv2.jar/xdb.jar 的软件部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-12
        • 2014-02-25
        • 1970-01-01
        • 2017-10-08
        • 2018-10-26
        • 2016-08-26
        • 2017-02-07
        • 1970-01-01
        相关资源
        最近更新 更多