2017-10-05 44 views
0

这个问题开始很奇怪: 我在我的应用程序中使用了org.jsr107.ri库。appengine-api-1.0-sdk-1.9.57.jar和cache-api-1.0.0.jar之间的冲突

当我开始我的应用程序,使用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-1.9.57.jar库中有javax.cache.CacheManager类。

当我从该库中删除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

一年前发生在我身上。问题是GAE不符合JCache。它支持JCache的提议草案,但不是最终版本。谷歌对标准进行了修改,并针对该草案实施。遗憾的是GAE迷的整个Java社区GAACH上的JCache对我们来说是无效的。