【问题标题】:exception when initialising cache causes "grails run-app" to fail初始化缓存时的异常导致“grails run-app”失败
【发布时间】:2018-11-23 18:03:30
【问题描述】:

在我的 Grails 2.5.4 应用程序中,我安装了以下插件

compile ":cache:1.1.8"
runtime ":cache-ehcache:1.0.5"

当我运行grails run-app 时,我在启动时收到以下错误

java.lang.NullPointerException
    at grails.plugin.cache.ehcache.GrailsEhCacheManagerFactoryBean$ReloadableCacheManager.rebuild(GrailsEhCacheManagerFactoryBean.java:171)
    at grails.plugin.cache.ehcache.EhcacheConfigLoader.reload(EhcacheConfigLoader.groovy:63)
    at grails.plugin.cache.ConfigLoader.reload(ConfigLoader.groovy:42)
    at CacheGrailsPlugin.reloadCaches(CacheGrailsPlugin.groovy:202)
    at CacheGrailsPlugin$_closure3.doCall(CacheGrailsPlugin.groovy:158)

如果我构建 WAR 并查看 lib 目录,它包含以下两个依赖项:

  • ehcache-2.9.0.jar
  • ehcache-core-2.4.8.jar

根据this issue中的建议,我排除了BuildConfig中的传递ehcache-core依赖

runtime (":hibernate:3.6.10.18") { 
  excludes "ehcache-core" 
}

如果我重建 WAR,ehcache-core JAR 会被排除,但是当我运行 grails run-app 时,我仍然会在启动时遇到同样的错误。我怀疑问题的原因是 ehcache 依赖项,但我不知道应该使用哪个 JAR。

【问题讨论】:

  • 运行dependency-report 并在某些不同版本中查找包含 ehcache-core 的内容。我不再有任何 grails 2 项目,但我记得在一个旧项目中,我们必须专门从插件依赖项中排除 hibernate,这样下游的依赖项也不会被包括在内。我认为这与缓存有关。
  • 例如,为了排除旧版本的hibernate(它本身包含旧版本的ehcache-core),我们修改了插件包含,例如compile(":shiro:1.2.1") { excludes "servlet-api", "hibernate", "quartz" },使用dependency-report 来识别包含的内容旧的/不正确的依赖关系

标签: grails ehcache


【解决方案1】:

升级到休眠 3.6.10.19 似乎可以解决这个问题。当我构建 WAR 时,包括以下 ehcache 依赖项:

  • ehcache-2.9.0.jar
  • hibernate-ehcache-3.6.10.Final.jar

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 2017-11-05
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多