我正在使用具有此服务的插件:
package grails.plugins.imports
class ImportsService {
static rabbitQueue = "${grails.util.Holders.grailsApplication.metadata['app.name']}ImportRows"
....
}
虽然这在使用run-app时工作正常;即grails run-app,这在试图作为战争运行时会造成严重破坏; grails run-war。
2014-09-09 15:54:25,069 [localhost-startStop-1] ERROR StackTrace - 全栈跟踪:
java.lang.NullPointerException: Cannot get property 'metadata' on null object
at org.codehaus.groovy.runtime.NullObject.getProperty(NullObject.java:56)
at org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:169)
at org.codehaus.groovy.runtime.callsite.NullCallSite.getProperty(NullCallSite.java:44)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:227)
at grails.plugins.imports.ImportsService.<clinit>(ImportsService.groovy:9)
不支持插件,这里有什么建议吗?
Grails 2.3.10
提前致谢, 托德
答案 0 :(得分:0)
所以,我知道你的目标是避免分支插件,但我认为问题在于插件是在早些时候编写的,当你通过holder类获取grailsApplication对象时。这些天并不是真的推荐(见Burt Beckwith's post on the subject),但有options。
插件获取grailsApplication对象的最简单方法是通过依赖注入:
class ImportsService {
def grailsApplication
static rabbitQueue = "${grailsApplication.metadata['app.name']}ImportRows"
//....
}
虽然在这种情况下,由于您只需要app.name,因此最好:
class ImportsService {
static rabbitQueue = "${grails.util.Metadata.current.'app.name'}ImportRows"
//....
}
您可以尝试在本地副本中操作插件代码,看看是否能解决问题。通过在项目资源管理器视图中提供插件,GGTS使这一点变得相当容易。如果该更改有效,并且您可以向插件开发人员提交补丁,则可以将该修补程序作为正式版本的一部分。