有没有一种"内置"方法可以将 BuildConfig 从插件共享到主机应用程序?
我们有一个使用自制插件的应用程序,我们需要将所有特殊配置(所以每个但依赖)设置从插件复制/粘贴到当前应用程序。
这是非常可怕的,它带来了维护问题:当插件 A 更改其配置时,我们需要使用此配置更新所有项目。
我希望能够尽可能多地重用插件中的构建设置,并将特定设置(或替换设置)添加到主项目 BuildConfig。
我们想要分享的属性类型是:
-
常见的Grails配置块,如:
grails.project.class.dir = "target/classes"grails.project.test.class.dir = "target/test-classes"grails.project.test.reports.dir = "target/test-reports"grails.project.target.level = 1.6grails.project.source.level = 1.6
-
特定插件配置:
grails.project.myplugin.config = { specials things }
-
一些共享属性,如依赖项版本
事实上,我们希望在 builconfig 中拥有一种继承,有点像在 maven pom 文件中定义父项目一样。
在 MyAppGrailsPlugin.groovy 中,您需要添加一个合并配置函数:
def doWithSpring = {
mergeConfig(application)
}
private void mergeConfig(GrailsApplication app) {
ConfigObject currentConfig = app.config.grails.fooConfig
ConfigSlurper slurper = new ConfigSlurper(Environment.getCurrent().getName());
ConfigObject secondaryConfig = slurper.parse(app.classLoader.loadClass("FooConfig"))
ConfigObject config = new ConfigObject();
config.putAll(secondaryConfig.fooConfig.merge(currentConfig))
app.config.grails.fooConfig = config;
}
def onConfigChange = { event ->
this.mergeConfig(application)
}
参考: http://swestfall.blogspot.ca/2011/08/grails-plugins-and-default-configs.html
我认为您不能将插件BuildConfig
中的设置合并到应用程序的BuildConfig
,因为它在类路径中尚不可用。
此外,您的"特殊设置"(如果它们与构建无关)应该被外部化并转到插件特定的*Config.groovy
,这些可以通过在主机应用程序的Config.groovy
中使用以下内容轻松合并到主机应用程序:
grails.config.locations = ["classpath:${pluginSpecific}-config.groovy"]
有关详细信息,请参阅外部化配置,有关详细信息,请参阅插件配置插件。
另一方面,当涉及到 maven pom 中的父对象等行为时,从插件操作主机应用程序的构建过程的方法有点可怕。这必须由主机的构建配置驱动,并且主机可以对插件的行为幂等。