我知道自從Groovy 2.0以來,有靜態編譯的註釋。 然而,偶然地忽略這樣的註釋並且仍然遇到麻煩很容易。Groovy靜態編譯是否有全局標誌?
有沒有什麼辦法可以實現相反的編譯器行爲,比如默認編譯靜態的所有項目文件,並編譯動態的文件,例如按照目的選擇@CompileDynamic註解。
我知道自從Groovy 2.0以來,有靜態編譯的註釋。 然而,偶然地忽略這樣的註釋並且仍然遇到麻煩很容易。Groovy靜態編譯是否有全局標誌?
有沒有什麼辦法可以實現相反的編譯器行爲,比如默認編譯靜態的所有項目文件,並編譯動態的文件,例如按照目的選擇@CompileDynamic註解。
不是在這個時候,但有一個open Jira issue here你可以按照觀看進度此功能
還有一個關於這樣on the Groovy developers list
我已經找到了一些方法的討論(我相信最近引入)功能,允許使用Gradle來完成。
在的build.gradle文件包含我們需要添加以下行常規源項目:
compileGroovy {
configure(groovyOptions) {
configurationScript = file("$rootDir/config/groovy/compiler-config.groovy")
}
}
或compileTestGroovy { ...
爲應用同一測試源。請記住,靜態編譯和類型檢查都不適用於Spock Framework。 Spock的本質運用了很多動態的「時髦」。
然後在該項目的根文件夾創建配置/常規/和一個名爲編譯器的Config.groovy中的文件。該文件的內容如下:
import groovy.transform.CompileStatic
withConfig(configuration) {
ast(CompileStatic)
}
的configurationScript的顯然路徑和名稱可能會有所不同,它是由您決定。它不應該寧願去同樣的src/main/groovy雖然它會混合完全不同的問題。
當然也可以用groovy.transform.TypeChecked
或任何其他註釋來完成。
要在某些類別或方法上反轉應用的行爲,則可以分別使用@CompileDynamic
註釋或@TypeChecked(TypeCheckingMode.SKIP)
。
我不確定如何在沒有使用Gradle作爲構建工具的情況下實現同樣的功能。儘管我可能會在未來更新這個答案。
嘿,這是寫在Groovy的文檔中的某處嗎?你能提供這個解決方案的來源嗎? – ThanosFisherman 2017-03-29 00:48:48
謝謝,我剛剛投票了JIRA問題,現在正在追蹤它。 – topr 2012-08-09 15:20:10
https://issues.apache.org/jira/browse/GROOVY-5503 – 2015-05-18 00:44:54
正如@topr提到的,現在這是groovy 2.1+中的一個特性,它可能會更好地爲未來的訪問者更新答案。 – Terence 2015-08-16 19:39:57