【问题标题】:Conflict between appengine-api-1.0-sdk-1.9.57.jar and cache-api-1.0.0.jarappengine-api-1.0-sdk-1.9.57.jar 和 cache-api-1.0.0.jar 之间的冲突
【发布时间】:2017-10-05 09:55:47
【问题描述】:

这个问题开始很奇怪: 我在我的应用程序中使用了 org.jsr107.ri 库。

当我使用 gradle 启动我的应用程序时,一切都很好,但是当我构建一个 war 文件并将其部署到我的 tomcat 服务器上时,我得到了异常:

java.util.ServiceConfigurationError: javax.cache.spi.CachingProvider: Provider org.jsr107.ri.spi.RICachingProvider could not be instantiated ... Caused by: java.lang.IncompatibleClassChangeError: Implementing class

经过一番调查,我发现我在cache-api-1.0.0.jar库中有一个接口javax.cache.CacheManager,在appengine-api-1.0-sdk-中有一个类javax.cache.CacheManager 1.9.57.jar 库。

当我从这个库中删除 javax.cache.* 时(甚至将 appengine-api-1.0-sdk-1.9.57.jar 重命名为 zappengine-api-1.0-sdk-1.9.57.jar 以更改顺序加载类),我的应用程序开始正常工作,但这个解决方案看起来很糟糕(对我来说)。

我打开了一个 JSR107 规范(http://download.oracle.com/otn-pub/jcp/jcache-1_0-fr-spec/JSR107FinalSpecification.pdf),发现应该使用 CacheManager interface

这个问题有好的解决方案吗? 是否有没有 javax.cache(可能还有 javax.mail)库的 appengine-api-1.0-sdk-1.9.57.jar 文件?

【问题讨论】:

    标签: java google-app-engine tomcat google-api


    【解决方案1】:

    一年前也发生在我身上。问题是 GAE 不符合 JCache。它支持 JCache 的提议草案版本,但不是最终版本。谷歌寄希望于标准没有改变,并针对草案实施。不幸的是,对于 GAE 粉丝的整个 Java 社区来说,GAE 上的 JCache 对我们来说实际上毫无用处。

    【讨论】:

      【解决方案2】:

      在您的 appengine-web.xml 中添加以下标签

      <class-loader-config>
        <priority-specifier filename="cache-api-1.1.1.jar"/>
      </class-loader-config>
      

      我遇到了同样的问题并通过上面的方法得到了解决。 如需参考,请查看 GCP 页面。 https://cloud.google.com/appengine/docs/standard/java/runtime

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-28
        • 1970-01-01
        相关资源
        最近更新 更多