【发布时间】: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 来识别包含的内容旧的/不正确的依赖关系