grails 2.3.6中的FixtureLoader 1.2无法加载数据或创建加载程序

grails 2.3.6中的FixtureLoader 1.2无法加载数据或创建加载程序,grails,grails-2.0,fixtures,Grails,Grails 2.0,Fixtures,在引导过程中,我在将Grails 2.3.6加载到夹具时遇到问题。 尝试加载数据时抛出空指针 这是我尝试使用的代码: class BootStrap { def fixtureLoader def init = { ServletContext ctx -> environments { ... development { fixtureLoader.load("developm

在引导过程中,我在将Grails 2.3.6加载到夹具时遇到问题。

尝试加载数据时抛出空指针

这是我尝试使用的代码:

class BootStrap {
    def fixtureLoader
    def init = { ServletContext ctx ->
        environments {
            ...
            development {
                fixtureLoader.load("developmentTinySanityCheckData")
            }
        }
    }
    ...
我的项目位于~/grails-2.3.6-workspace/imca2 因此,我希望上面的内容能够加载developmentsTanityCheckData.groovy~/grails-2.3.6-workspace/imca2/fixtures

该文件确实存在且可读:

ls -lt ~/grails-2.3.6-workspace/imca2/fixtures
-rw-r--r-- 1 nick nick    83 2014-03-16 19:32 developmentTinySanityCheckData.groovy
并包含以下最小数据:

fixture {
    DoctorDecisionMakerType(com.ubergen.DecisionMakerType) {
        code = "Doctor"
    }
}
但是加载失败,因为GrailsContextLoaderNullPointerException:无法对null对象调用load()

[localhost-startStop-1] ERROR context.GrailsContextLoader  - Error initializing the application: Cannot invoke method load() on null object
java.lang.NullPointerException: Cannot invoke method load() on null object
at org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:77)
at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:45)
...
at BootStrap$_closure1_closure3_closure6.call(BootStrap.groovy)
at groovy.lang.Closure.call(Closure.java:405)
at BootStrap$_closure1_closure3_closure6.call(BootStrap.groovy)
...
无法注入FIXTURELOADER?

我假设null对象意味着fixture加载器没有被实例化;也许它不是由依赖注入程序创建的?我不知道这是否正确

我试图强制fixtureLoader与以下内容共存:

class BootStrap {
    def fixtureLoader
    def init = { ServletContext ctx ->
        fixtureLoader = ctx.getBean('fixtureLoader'); // INJECT LOADER
        environments {
            ...
            development {
                fixtureLoader.load("developmentTinySanityCheckData")
            }
        }
    }
    ...
但是Get-getBean()的签名不适用于参数[fixtureLoader]

ERROR context.GrailsContextLoader  - Error initializing the application: No signature of method: org.apache.catalina.core.ApplicationContextFacade.getBean() is applicable for argument types: (java.lang.String) values: [fixtureLoader]
版本:

ubuntu 10.04
eclipse / SpringToolSuite 3.4.0
grails 2.3.6
groovy 2.1.9 (for both project and workspace)
grails plugins:
    build-test-data 2.1.2
    fixtures 1.2

我最初的问题是试图在fixtureLoader上调用load时抛出了一个空指针。fixtureLoader似乎不可用,至少在开发模式下是这样

在签入BuildConfig.groovy时,我发现

plugins {
    ...
    compile ":build-test-data:2.1.2"
    test ":fixtures:1.2"
}
这可能意味着夹具加载程序仅在执行模式为test时创建并可用

我将此更正为:

plugins {
    ...
    compile ":build-test-data:2.1.2"
    compile ":fixtures:1.2"
}

加载器也是在开发模式下创建和工作的。

尽管您在第二种方法中尝试从ApplicationContext获取bean的方式是错误的,但按照您的方法,我没有遇到任何问题<上面的代码>ctx是servletContext,而不是applicationContext。为了做到这一点,必须使用像
grailsApplication.mainContext.getBean('fixtureLoader')
这样的东西。grailsApplication被注入到
BootStrap.groovy
。然而,第一种方法应该按原样工作。它在Grails2.3.6中对我有效。真正的问题是,试图在fixtureLoader上调用load会抛出一个空指针。试图从上下文中获取bean只是对修复它的胡乱猜测,感觉不对。我现在已经找到了问题所在。这是一个复制/粘贴错误。我马上就发布。我应该很清楚我在开发模式中遇到了问题。事实证明,这是相关的。