禁用 Grails 插件

Posted

技术标签:

【中文标题】禁用 Grails 插件【英文标题】:Disable Grails plugin 【发布时间】:2010-11-13 20:57:52 【问题描述】:

在我的 Grails 应用程序中,我想防止在运行单元测试时加载 Searchable 插件。我尝试在 Bootstrap 类中使用以下代码来执行此操作

def grailsApplication

def init = servletContext ->
    def currentEnv = grails.util.Environment.current.name

    if (currentEnv == 'test') 

        def doNothing = println "Searchable is disabled"

        // This returns null!
        def searchablePluginClass = grailsApplication.getClassForName("SearchableGrailsPlugin")

        searchablePluginClass.metaClass.doWithDynamicMethods = doNothing 
        searchablePluginClass.metaClass.doWithSpring = doNothing 
        searchablePluginClass.metaClass.doWithApplicationContext = doNothing 
    

但是这不起作用,因为grailsApplication.getClassForName("SearchableGrailsPlugin") 返回 null,大概是因为当这段代码运行时,这个类不在类路径上。有没有其他方法可以禁用这个插件?

【问题讨论】:

【参考方案1】:

我找到了解决方案。将以下内容添加到 Config.groovy:

environments 
    test 
        plugin 
            excludes = "searchable"
        
    

【讨论】:

【参考方案2】:

我不确定如何禁用插件,native compass XML 可能有办法

使用 grails,您也许可以通过以下方式使单元测试更容易接受…… 安装这个附加插件: grails install-searchable-config

这将为您提供 grails-app/conf/Searchable.groovy 文件。你可以编辑 environment.test.searchable 闭包至少禁用 bulkIndexOnStartup 和 mirrorChanges。

 environments 
 test 
    searchable 
        // disable bulk index on startup
        bulkIndexOnStartup = false
        mirrorChanges = false

        // use faster in-memory index
        compassConnection = "ram://test-index"
    

 

【讨论】:

【参考方案3】:

要禁用运行测试使用的测试构建插件 - 如果您在 BuildConfig.groovy 中包含您的插件,则可以在其中执行以下操作;

environments 
            development 
                compile ":searchable:0.6.6"
            
            test 
            
            production 
                compile ":searchable:0.6.6"
            
        

这会阻止构建环境在测试时包含插件,但是,如果您使用此环境构建 UAT 版本,这也会影响测试版本。

【讨论】:

以上是关于禁用 Grails 插件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Grails/Spring Security 插件中禁用 /login/auth

Grails / GORM,禁用一级缓存

Grails,SpringSecurity - 如果未记录,则禁用重定向

如何禁用 Grails createLink 编解码器(编码)?

在 grails 中,我如何获得对所有当前会话的引用?

用于 Grails 2.0 的 Grails/Gradle 插件