【问题标题】:Is there a way to inherit BuildConfig from a set of plugins to the current application?有没有办法将 BuildConfig 从一组插件继承到当前应用程序?
【发布时间】:2013-10-30 06:40:34
【问题描述】:

是否有“内置”方式将 BuildConfig 从插件共享到主机应用程序?

我们有一个使用自制插件的应用程序,我们需要将所有特殊配置(所以除了依赖项之外的所有特殊配置)设置从插件复制/粘贴到当前应用程序。

这很糟糕,它带来了维护问题:当插件 A 更改其配置时,我们需要使用此配置更新所有项目。

我希望能够尽可能多地重复使用插件中的构建设置,并将特定设置(或替换设置)添加到主项目 BuildConfig。

我们想分享的属性是:

  • 常见的 grails 配置块,如:

    grails.project.class.dir = "目标/类" grails.project.test.class.dir = "目标/测试类" grails.project.test.reports.dir = "目标/测试报告" grails.project.target.level = 1.6 grails.project.source.level = 1.6

  • 具体插件配置:

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

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

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

【问题讨论】:

  • 你能提供插件中那些“特殊配置”的样本吗?只是想确定将这些设置直接放在应用程序中而不是在插件中会有什么问题。
  • @dmahapatro 我已经更新了我的问题以提供一些示例。谢谢。

标签: grails plugins build


【解决方案1】:

在你的MyAppGrailsPlugin.groovy中,你需要添加一个merge config函数:

    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

【讨论】:

    【解决方案2】:

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

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

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

    请参阅Externalized Configuration 了解详情和Plugin Config plugin 了解更多信息。

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

    【讨论】:

    • 但这一切都是为了共享'Config',而不是BuildConfig,不是吗?
    • 是的。您不能使用外部配置或合并它们来共享BuildConfig。因此,我提到如果设置与构建无关,请将它们移至 Config。
    • 所以在这种情况下,我很抱歉,但这并不是我问题的真正答案:'有没有办法继承 BuildConfig'
    • 答案在我答案的第一行。 AFAIK 没有办法。
    猜你喜欢
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    • 2011-06-09
    • 2011-05-23
    • 2021-12-21
    相关资源
    最近更新 更多