Grails:无法对null对象调用方法production()

Grails:无法对null对象调用方法production(),grails,nullpointerexception,Grails,Nullpointerexception,这是我的Config.groovy的环境部分(使用2.3.6): 当我运行一个grails-Dgrails.env=development运行应用程序时,我得到: |打包应用程序时出错:加载Config.groovy时出错:无法对null对象调用方法production()(使用--stacktrace查看完整跟踪) 这是怎么回事?在新的生产线中使用生产DSL。如果与开发结束的闭包在同一行中使用,那么它将被视为返回类型developmentcall(它是void)的新方法调用,并带有闭包参数。方

这是我的
Config.groovy
的环境部分(使用2.3.6):

当我运行一个
grails-Dgrails.env=development运行应用程序时,我得到:

|打包应用程序时出错:加载Config.groovy时出错:无法对null对象调用方法production()(使用--stacktrace查看完整跟踪)


这是怎么回事?

在新的生产线中使用
生产
DSL。如果与开发结束的闭包在同一行中使用,那么它将被视为返回类型
development
call(它是void)的新方法调用,并带有闭包参数。方法名称为
production
类似:

development(clos1).production(clos2)

development(closure)
production(closure)
因此,将其用作:

environments {
    development {
        grails.logging.jul.usebridge = true
        grails.serverURL = "http://localhost:8080"
    } 
    production {
        grails.logging.jul.usebridge = false
        grails.serverURL = "http://myapp.example.io"
    }
}

另外,对于run app,您不需要将环境指定为
development
,默认环境是development,因此只要
grails run app
就足够了。

谢谢@dmahaptro(+1)-我只是好奇,解析此DSL的实际过程是什么?什么流程/组件(如您所说)将我的
生产
DSL视为一个新的方法调用?这是Groovy、Grails中的东西还是完全其他的东西?再次感谢!这是groovy提供的一种语法糖,用于构建DSL,其中方法调用可以在不使用大括号的情况下表示。示例:
方法(a,b)
也可以作为
方法a,b
调用。
environments {
    development {
        grails.logging.jul.usebridge = true
        grails.serverURL = "http://localhost:8080"
    } 
    production {
        grails.logging.jul.usebridge = false
        grails.serverURL = "http://myapp.example.io"
    }
}