2012-08-08 48 views
9

我知道自從Groovy 2.0以來,有靜態編譯的註釋。 然而,偶然地忽略這樣的註釋並且仍然遇到麻煩很容易。Groovy靜態編譯是否有全局標誌?

有沒有什麼辦法可以實現相反的編譯器行爲,比如默認編譯靜態的所有項目文件,並編譯動態的文件,例如按照目的選擇@CompileDynamic註解。

回答

5

不是在這個時候,但有一個open Jira issue here你可以按照觀看進度此功能

還有一個關於這樣on the Groovy developers list

+0

謝謝,我剛剛投票了JIRA問題,現在正在追蹤它。 – topr 2012-08-09 15:20:10

+3

https://issues.apache.org/jira/browse/GROOVY-5503 – 2015-05-18 00:44:54

+2

正如@topr提到的,現在這是groovy 2.1+中的一個特性,它可能會更好地爲未來的訪問者更新答案。 – Terence 2015-08-16 19:39:57

11

我已經找到了一些方法的討論(我相信最近引入)功能,允許使用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作爲構建工具的情況下實現同樣的功能。儘管我可能會在未來更新這個答案。

+1

嘿,這是寫在Groovy的文檔中的某處嗎?你能提供這個解決方案的來源嗎? – ThanosFisherman 2017-03-29 00:48:48