我知道,因为Groovy 2.0有静态编译的注释。 然而,偶然省略这样的注释并且仍然遇到麻烦很容易。
是否有任何方法可以实现相反的编译器行为,例如默认情况下编译静态所有项目文件,并编译仅用于某种类型@CompileDynamic注释的目的选择的动态文件?
答案 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