top*_*opr 12 groovy static compilation
我知道,因为Groovy 2.0有静态编译的注释.然而,偶然省略这样的注释并且仍然遇到麻烦很容易.
是否有任何方法可以实现相反的编译器行为,例如默认情况下编译静态所有项目文件,并编译仅用于某种类型@CompileDynamic注释的目的选择的动态文件?
top*_*opr 16
我发现了一些(我相信最近推出的)功能,它允许使用Gradle.
在包含groovy源的项目的build.gradle文件中,我们需要添加以下行:
compileGroovy {
configure(groovyOptions) {
configurationScript = file("$rootDir/config/groovy/compiler-config.groovy")
}
}
Run Code Online (Sandbox Code Playgroud)
或者compileTestGroovy { ...
将其应用于测试源.请记住,静态编译和类型检查都不适用于Spock Framework.Spock的性质充分利用了动态的'groovyness'.
然后在项目的根目录下创建文件夹config/groovy /和一个名为compiler-config.groovy的文件.该文件的内容如下:
import groovy.transform.CompileStatic
withConfig(configuration) {
ast(CompileStatic)
}
Run Code Online (Sandbox Code Playgroud)
显然,配置脚本的路径和名称可能会有所不同,这取决于您.它不应该转到相同的src/main/groovy,因为它会混合完全不同的问题.
当然,可以使用相同groovy.transform.TypeChecked
或任何其他注释来完成相同的操作.
为了反转对某些类或方法的应用行为,可以使用@CompileDynamic
注释或@TypeChecked(TypeCheckingMode.SKIP)
分别使用注释.
当没有使用Gradle作为构建工具时,我不确定如何实现相同目的.我可能会在将来用这样的信息更新这个答案.
不是在这个时候,但是在这里有一个开放的Jira问题,您可以关注此功能的进度
还讨论了在Groovy开发人员列表中执行此操作的方法