【问题标题】:Compilation of Groovy Code in Grails applicationGrails应用程序中Groovy代码的编译
【发布时间】:2011-06-30 16:56:12
【问题描述】:

当我通过grails war 为我的 Grails 应用程序构建一个 war 文件时,它仍然包含一些 groovy 文件。

war-filed部署到应用服务器后,这些文件何时以及如何编译成java字节码?

【问题讨论】:

    标签: grails groovy jvm-languages


    【解决方案1】:

    模板用于动态脚手架。例如,如果您有这样的控制器

    class PersonController {
       static scaffold = Person
    }
    

    然后它将使用模板在运行时创建控制器。这在实际应用程序中并不经常使用 - 它更多用于演示和入门 - 但它是一种选择。动态生成的控制器和 GSP 基于模板创建并在内存中编译。

    groovy-all jar 确实有可以编译 Groovy 源代码的代码,但那是因为它是“-all”jar。仅仅因为它在那里并不意味着它必须被使用。一般来说,所有编译都是在构建战争时完成的,包括预编译 GSP。这是为了提高性能 - 您希望应用在生产环境中尽可能快。

    【讨论】:

    • 这很有趣。我是否理解正确,可以在不包含任何 groovy 文件且不包含 groovy-all.jar 的情况下部署 grails 应用程序?您对技术细节有任何提示吗?
    • 绝对不是。 Grails 在编译和运行时都使用 Groovy - 在 GORM 中的动态行为(例如 Person.findByUsername())和应用程序生命周期的大多数方面,它在很大程度上依赖于 Groovy。我认为删除 .groovy 模板是安全的,但你为什么要关心?
    • 嗯,有人担心在生产中对正在运行的 grails 应用程序进行一些动态修改是可能的。因此,首先我尝试更好地了解 Grails 和 Groovy 的实际工作原理,其次我尝试找出哪些部分实际上不需要并且可以从应用程序中删除。而且我仍然不明白这个包罗万象的 groovy-all.jar 能做什么
    【解决方案2】:

    groovy 文件在你打包到战争之前被编译成类文件。检查WEB-INF/classes目录

    【讨论】:

    • 大部分,但不是全部。在 WEB-INF/templates/scaffolding/Controller.groovy 中仍然有一个 Grails 生成的 groovy 文件。此外,该应用程序包含一个 groovy-all.jar,它似乎包含编译 groovy 文件所需的所有内容。
    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多