语法糖/聪明的hack问题。
我想以一种比以下方式更优雅/更简洁的方式编写多环境配置块(它可以工作,但是很难看):
environments {
development {
// long list of directives
}
["staging", "production"].each{"$it"{ // <- ugly!
// another long list of directives
}}
}
我试图一起破解一些DSL,如下所示,将
propertyMissing
添加到EnvironmentBlockEvaluator.metaClass
,但我做不到。主要问题在于,配置文件中的裸词(例如staging
)在groovy.util.ConfigObject
中的闭包有机会对其执行任何操作之前被转换为空的environments { }
。我不知道为什么。(staging | production) {
// directives
}
有什么聪明的主意吗?
最佳答案
您可以在switch
中使用resources.groovy
块-我认为它也适用于Config.groovy
(尽管尚未进行实际测试)。
switch (Environment.current) {
case Environment.DEVELOPMENT:
case Environment.TEST:
//stuff for dev & test environments
break
default:
//production stuff
}
但是,仅比
["staging", "production"].each{"$it"...
稍微容易一点。