有没有办法将 BuildConfig 从一组插件继承到当前应用程序



有没有一种"内置"方法可以将 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 中的父对象等行为时,从插件操作主机应用程序的构建过程的方法有点可怕。这必须由主机的构建配置驱动,并且主机可以对插件的行为幂等。

最新更新