2017-10-05 48 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對我們來說是無效的。