是否有Groovy静态编译的全局标志?

时间:2012-08-08 14:37:14

标签: groovy static compilation

我知道,因为Groovy 2.0有静态编译的注释。 然而,偶然省略这样的注释并且仍然遇到麻烦很容易。

是否有任何方法可以实现相反的编译器行为,例如默认情况下编译静态所有项目文件,并编译仅用于某种​​类型@CompileDynamic注释的目的选择的动态文件?

2 个答案:

答案 0 :(得分:15)

我找到了一些(我相信最近推出的)功能,允许使用Gradle。

在包含groovy源的项目的 build.gradle 文件中,我们需要添加以下行:

compileGroovy {
    configure(groovyOptions) {
        configurationScript = file("$rootDir/config/groovy/compiler-config.groovy")
    }
}

compileTestGroovy { ...将其应用于测试源。请记住,静态编译和类型检查都不适用于Spock Framework。 Spock的性质充分利用了动态的'groovyness'。

然后在项目的根目录下创建文件夹 config / groovy / 和一个名为 compiler-config.groovy 的文件。该文件的内容如下:

import groovy.transform.CompileStatic

withConfig(configuration) {
    ast(CompileStatic)
}

显然, configurationScript 的路径和名称可能会有所不同,这取决于您。它不应该转到相同的 src / main / groovy ,因为它会混合完全不同的问题。

当然可以使用groovy.transform.TypeChecked或任何其他注释完成相同的操作。

要撤消某些类或方法的应用行为,可以分别使用@CompileDynamic注释或@TypeChecked(TypeCheckingMode.SKIP)

当不使用Gradle作为构建工具时,我不确定如何实现相同目的。我可以在将来用这样的信息更新这个答案。

答案 1 :(得分:5)

目前还不是,但您可以关注open Jira issue here来观看此功能的进展情况

还讨论了执行此操作的方法on the Groovy developers list