1

I am using Json views plugin of grails. Which works in development, but when I run it as a jar file, it is not able to find the templates/gson files for rendering. I get the following error

//code 
    def template = jsonViewTemplateEngine.resolveTemplate(<path to template>)
            def writable = template.make(kase: kase)

//exception
    Cannot invoke method make() on null object. Stacktrace follows:
java.lang.NullPointerException: Cannot invoke method make() on null object

Json Views we are using are a part of a inline plugin we are developing. Jar we create also runs with that inline plugin (implemented using gradle wrapper)

Any ideas/suggestions?

Environment: Grails - 3.2.0 Groovy - 2.4.7 Json-Views plugin - 1.1.1

4

2 回答 2

2

视图被预编译成类,以便通过 Gradle 和compileGsonViews任务进行部署。这是使用project.name默认设置完成的。

您将在build/main/gson-classes目录中注意到生成的类。例如,如果您的应用程序名称是foo,您将拥有类似部件被视为“包”名称的foo_book_show_gson.class类。foo_

在运行时。用于解析根据 中的info.app.name设置计算的视图的包名称grails-app/conf/application.yml

这意味着如果在 Gradle 中您的project.name评估结果是foo并且设置application.yml也是如此,foo那么一切都很好。这是最常见的情况,因为通常您的应用程序名称在两个地方都相同。

如果info.app.name和 Gradleproject.name不匹配,您可能会遇到视图无法解决的问题。

您有两种选择来解决此问题。一种是修改build.gradle显式指定包名:

 compileGsonViews.packageName = 'foo'

然后确保info.app.name匹配该值。

info.app.name第二个选项是重命名您的项目目录,以便project.name对齐。

于 2016-11-23T14:55:21.260 回答
0

Json View 行为在开发模式和战争模式下是不同的。

WritableScriptTemplate template
if (Environment.isDevelopmentEnvironmentAvailable()) {
    template = attemptResolvePath(path)
    if (template == null) {
        template = attemptResolveClass(path)
    }
} else {
    template = attemptResolveClass(path)
    if (template == null) {
        template = attemptResolvePath(path)
    }
}
if (template == null) {
    template = NULL_ENTRY
}

在开发模式下,grails 将首先按文件路径加载您的模板,然后按类名加载。
如果您正在处理不区分大小写的文件系统,则“your_template_name”和“YOUR_TEMPLATE_NAME”之类的模板文件将被视为相同。
但类名区分大小写,'your_template_name_class' 和 'YOUR_TEMPLATE_NAME_CLASS' 不同;

也许您的模板文件名不正确。

例如,如果您的班级名称是:

QueryResult

您的模板文件应位于:

/views/queryResult/_queryResult.gson

Json View 将搜索类,如:

<Project-Name>_queryResult__queryResult_gson
于 2017-12-02T03:00:36.000 回答