我正在制作一个Grails插件和几个将使用该插件的Grails应用程序。
我想定义一些属性并在插件中为它们提供默认值,但允许应用覆盖它们的值(可选)。这个问题围绕着如何以这种方式连接插件和子应用程序的机械细节。
说我希望我的插件(grails-myplugin
)在其Config.groovy
中定义以下属性:
myplugin {
fizz {
whistles = true // Default for all child apps using this plugin
buzz = 3 // Default for all child apps using this plugin
}
}
grails.plugins.anotherPlugin.widget = 'auto'
grails.plugins.anotherPlugin.foo = '${myplugin.fizz.buzz}-40' // Hence, by default, is '3-40'
现在,我想要一个孩子Grails应用,比如,myapp.war
(使用grails-myplugin
)来覆盖2 fizz
个属性:
// myapp's Config.groovy:
myplugin {
fizz {
// whistles property not defined here so this app uses the
// plugin's default of "true"
// Overrides the plugin's value of 3; this imples
// grails.plugins.somePlugin.foo is '12-40'
buzz = 12
}
}
这里有几个问题:
我是否已根据所需功能正确放置所有内容?
使用上述配置,在grails-myplugin
' Config.groovy
中,我收到一条错误消息:
此行有多个标记: - 无法解析groovy.lang.MetaClass类型。它是从所需的.class文件间接引用的。 - 无法解析groovy.lang.GroovyObject类型。它是从所需的.class文件间接引用的。
我收到此错误这一事实告诉我,我以太尝试做一些在Grails中不可能完成的事情,或者说我做错了。想法?
答案 0 :(得分:0)
这里有石英插件如何解决它: https://github.com/grails-plugins/grails-quartz/blob/master/QuartzGrailsPlugin.groovy 看看loadQuartzConfig方法。
另请注意,grails插件会排除它的某些部分以避免安装时出现问题。它在插件文件上配置如下:
def pluginExcludes = [
'grails-app/jobs/**',
'src/docs/**',
'web-app/**'
]