【问题标题】:Exclude plugin for specific environment排除特定环境的插件
【发布时间】:2013-01-08 05:09:32
【问题描述】:

我正在使用 grails 2.1。

在为生产构建时,我需要排除插件。

This 帖子提到向插件添加范围。 我相信这需要编辑单独的插件描述符?

我想在一个位置定义要排除的插件。

我尝试将以下内容添加到 config.groovy:

environments {
    production {
    plugin.excludes='grails-melody'
    }
}

当我检查战争时,它仍然包含 WEB-INF/plugins 下的旋律文件夹。

我应该补充一点,大多数应用程序插件都在 application.properties 中指定如下:

plugins.build-test-data=2.0.3
plugins.fixtures=1.1
plugins.geoip=0.2
plugins.grails-melody=1.12
etc...

如何排除生产版本的特定插件?

谢谢

【问题讨论】:

  • 仅供参考:我对此表示赞成,因为我认为这表明了研究工作:)
  • Sérgio,您既是喜剧演员,也是开发者! ;) 谢谢 :)
  • @ThomasBuckley 解决方案在 grails 2.4.3 版本中对我不起作用,我想在开发模式下排除插件。你能给出任何想法吗?
  • @AnkitGupta 我已经超过 18 个月没有在 Grails 上工作了,这对我来说是一段遥远的记忆!我建议用您的代码、环境设置和问题发布一个新问题。也许链接回此以显示您完成了一些搜索;)

标签: grails grails-plugin


【解决方案1】:

在您的 buildConfig.groovy 中,您可以定义一个不导出的插件:

plugins {
  compile(':theplugin:theversion') {
    export = false
  }
}

【讨论】:

    【解决方案2】:

    让我在戒指中给出一个答案。类似于 @hitty5 的提议,但有一些更改(和错误修复)。

    对我们来说,在开发环境中工作时排除一些页面速度插件很重要,因为我们希望看到完整的资源。另一方面,我们不想复制应该在块之间的每台机器上的插件(就像你在 @hitty5 的解决方案中必须做的那样)。

    plugins {
        runtime ":hibernate:$grailsVersion"
        // ... some more plugins that I want in every environment
    
        if (Environment.getCurrent() in [Environment.PRODUCTION, Environment.TEST]) {
            // plugins, that I only want on the test and production servers
            println("BuildConfig: including page speed optimization plugins.")
            runtime ":zipped-resources:1.0"
            compile ":cache-headers:1.1.5"
            runtime ":cached-resources:1.0"
            runtime ":yui-minify-resources:0.1.5"
        }
    
        // ... and more plugins, if you like
        build ":tomcat:$grailsVersion"
    
    }
    

    希望这会有所帮助。

    一切顺利, 助焊剂

    【讨论】:

    • 如果在插件依赖列表中使用它是否有效。例如,我有插件 A,它使用插件 B 进行开发模式。如果依赖于我的插件 A 的应用程序,只能在我在插件 A BuildConfig 中根据您的条件指定的开发模式下拥有插件 B?
    【解决方案3】:

    首先我建议使用构建配置文件 (BuildConfig.groovy) 来解决您的插件依赖关系。在此文件中,您可以定义特定于 env 的块,例如:

    if (environment == Environment.PRODUCTION){
        plugins {            
                compile ":<plugin>:<version>"
            }
        }
    else {
            plugins {            
                compile ":<plugin>:<version>"
            }
    }
    

    【讨论】:

    • 您好,感谢您添加解决方案。像那样,它对我不起作用,因为 environment 没有定义。但是,如果我用 Environment.getCurrent() 替换它,它就可以正常工作。
    • 我检查了 WAR 文件,Java Melody 插件按照我的意愿被捆绑了。但是在生产 WAR(没有 jmelody)文件中,我仍然看到一个名为:grails.plugin.melody.GrailsMelodyUtil 的类(没有其他与 jmelody 相关的)
    【解决方案4】:

    在您的 BuildConfig.groovy 中,您可以定义一个不在特定环境中导出的插件:

        plugins {
          compile(':theplugin:theversion') {
             if (Environment.getCurrent() == Environment.PRODUCTION) {
                export = false
             }
          }
        }
    

    记得添加

    import grails.util.Environment
    

    在 BuildConfig.groovy 的开头

    【讨论】:

    • 解决方案在 grails 2.4.3 版本中对我不起作用,我想在开发模式下排除一个插件。你能给出任何想法吗?
    • 需要更加强调import grails.util.Environment。那个小混蛋太容易错过了。
    猜你喜欢
    • 2011-10-22
    • 2014-03-02
    • 2018-11-22
    • 2015-03-24
    • 2010-12-19
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多