Grails重写插件服务静态方法

Grails重写插件服务静态方法,grails,Grails,我使用的插件具有以下服务: package grails.plugins.imports class ImportsService { static rabbitQueue = "${grails.util.Holders.grailsApplication.metadata['app.name']}ImportRows" .... } 当使用run应用程序时,此功能可以正常工作;i、 e grails run应用程序,这在试图作为战争运行时造成了巨大破坏;圣杯管理战争 2

我使用的插件具有以下服务:

 package grails.plugins.imports

 class ImportsService {
     static rabbitQueue = "${grails.util.Holders.grailsApplication.metadata['app.name']}ImportRows"
 ....
 }
当使用run应用程序时,此功能可以正常工作;i、 e grails run应用程序,这在试图作为战争运行时造成了巨大破坏;圣杯管理战争

2014-09-09 15:54:25069[localhost-startStop-1]错误堆栈跟踪-完整堆栈跟踪:

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)
java.lang.NullPointerException:无法获取null对象上的属性“元数据”
位于org.codehaus.groovy.runtime.NullObject.getProperty(NullObject.java:56)
位于org.codehaus.groovy.runtime.InvokerHelper.getProperty(InvokerHelper.java:169)
位于org.codehaus.groovy.runtime.callsite.NullCallSite.getProperty(NullCallSite.java:44)
位于org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGetProperty(AbstractCallSite.java:227)
位于grails.plugins.imports.ImportsService。(ImportsService.groovy:9)
除了分叉插件,这里有什么建议吗

Grails 2.3.10

提前感谢,,
Todd

因此,我知道您的目标是避免分叉插件,但我认为问题在于,该插件是在早期编写的,当时您将通过holder类获取grailsApplication对象。这几天并不是真的被推荐(参见),但确实有

插件获取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通过在projectexplorer视图中提供插件使这变得相当容易。如果该更改有效,并且您可以向插件开发人员提交修补程序,您可能可以将该修复程序作为正式版本的一部分。

我认为您或插件可能会在不正确的
环境中定义
元数据
(例如在
开发中
)。请检查配置。检查配置的内容是什么?对不起,我不明白啊,我明白了。起初我认为Grails找不到
元数据。但是,
grailsApplication
存在问题。我没有主意。是的,我用叉子叉的。谢谢