4

是否有“内置”方式将 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.6 grails.project.source.level = 1.6

  • 具体插件配置:

    grails.project.myplugin.config = { 特价商品 }

  • 一些公共属性,如依赖版本

事实上,我们希望在 builconfig 中有一种继承,有点像在 maven pom 文件中定义父项目。

4

2 回答 2

4

在你的 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

于 2013-10-31T13:24:22.280 回答
1

我认为您不能将插件中的设置合并BuildConfig到应用程序中BuildConfig,因为它在类路径中还不能复制。

此外,您的“特殊设置”(如果它们与构建无关)应该外部化并转到特定插件*Config.groovy,可以通过在主机应用程序中使用以下内容轻松合并到主机应用程序Config.groovy

grails.config.locations = ["classpath:${pluginSpecific}-config.groovy"]

有关详细信息,请参阅外部化配置,有关更多信息,请参阅Plugin Config 插件

另一方面,当涉及到像 maven pom 中的父对象这样的行为时,从插件操纵宿主应用程序的构建过程的方法有点可怕。这必须由主机的构建配置驱动,并且主机可以对插件的行为是幂等的。

于 2013-11-01T01:39:25.033 回答