这个问题开始很奇怪: 我在我的应用程序中使用了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 接口。
这个问题有一个很好的解决方案吗? 是否有没有javax.cache(以及可能是javax.mail)库的appengine-api-1.0-sdk-1.9.57.jar文件?
答案 0 :(得分:0)
一年前也发生在我身上。问题是GAE不符合JCache。它支持JCache的拟议草案版本,但不支持最终版本。谷歌依据标准不改变和实施草案。不幸的是,GAE粉丝的整个Java社区对GAE的JCache实际上对我们没用。
答案 1 :(得分:0)
在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