Groovy 的插件繼承自 Java 插件并添加了對(duì) Groovy 項(xiàng)目的支持。它可以處理 Groovy 代碼,以及混合的 Groovy 和 Java 代碼,甚至是純 Java 代碼(盡管我們不一定推薦使用)。該插件支持聯(lián)合編譯,可以任意地混合及匹配 Groovy 和 Java 代碼各自的依賴。例如,一個(gè) Groovy 類可以繼承自一個(gè) Java 類,而這個(gè) Java 類也可以繼承自一個(gè) Groovy 類。這樣一來(lái),我們就能夠在項(xiàng)目中使用最適合的語(yǔ)言,并且在有需要的情況下用其他的語(yǔ)言重寫其中的任何類。
要使用 Groovy 的插件,請(qǐng)?jiān)跇?gòu)建腳本中包含以下語(yǔ)句:
使用 Groovy 插件
build.gradle
apply plugin: 'groovy'
Groovy 的插件向 project 中添加了以下任務(wù)。
表 24.1. Groovy 插件 - 任務(wù)
任務(wù)名稱 | 依賴于 | 類型 | 描述 |
compileGroovy
|
compileJava
|
GroovyCompile | 編譯production 的 Groovy 源文件。 |
compileTestGroovy
|
compileTestJava
|
GroovyCompile | 編譯test 的 Groovy 的源文件。 |
SourceSet Groovy |
SourceSet Java |
GroovyCompile | 編譯給定的 source set 里的 Groovy 源文件。 |
groovydoc
|
- | Groovydoc | 為 production 里的 Groovy 源文件生成 API 文檔。 |
Groovy 的插件向 Java 插件所加入的 tasks 添加了以下的依賴。
表 24.2. Groovy 插件 - 額外的 task 依賴
任務(wù)名稱 | 依賴于 |
classes | compileGroovy |
testClasses | compileTestGroovy |
sourceSetClasses | compileSourceSetGroovy |
圖 24.1. Groovy 插件 - tasks
Groovy 的插件會(huì)假定項(xiàng)目的布局如表 24.3,“Groovy 插件 - 項(xiàng)目布局”中所示。所有 Groovy 的源目錄都可以包含 Groovy 和 Java 代碼。Java 源目錄只能包含 Java 源代碼。這些目錄不一定得存在或是里面包含有什么內(nèi)容;Groovy 的插件只會(huì)進(jìn)行編譯,而不管它發(fā)現(xiàn)什么。
表 24.3. Groovy 插件 - 項(xiàng)目布局
目錄 | 意義 |
src/main/java
|
產(chǎn)品的Java源代碼 |
src/main/resources
|
產(chǎn)品的資源 |
src/main/groovy
|
Production Groovy 源代碼。此外可能包含聯(lián)合編譯的 Java 源代碼。 |
src/test/java
|
Java 測(cè)試源代碼 |
src/test/resources
|
測(cè)試資源 |
src/test/groovy
|
Test Groovy 源代碼。此外可能包含聯(lián)合編譯的 Java 源代碼。 |
sourceSet /java |
給定的源集的Java源代碼 |
sourceSet /resources |
給定的源集的資源 |
sourceSet /groovy |
給定的source set 的 Groovy 源代碼。此外可能包含聯(lián)合編譯的 Java 源代碼。 |
和 Java 插件一樣,Groovy 插件允許把 Groovy 的 production 和 test 的源文件配置為自定義的位置。
自定義 Groovy 自定義源文件布局
build.gradle
sourceSets {
main {
groovy {
srcDirs = ['src/groovy']
}
}
test {
groovy {
srcDirs = ['test/groovy']
}
}
}
由于 Gradle 的構(gòu)建語(yǔ)言基于 Groovy 的,且部分的 Groovy 使用 Groovy 實(shí)現(xiàn),因此 Gradle 已經(jīng)帶有了一個(gè) Groovy 庫(kù) (截至 Gradle 1.6 所帶的 Groovy 庫(kù)的版本是 1.8.6)。然而,Groovy 項(xiàng)目需要顯式地聲明一個(gè) Groovy 依賴。這個(gè)依賴會(huì)在編譯和運(yùn)行的類路徑時(shí)用到。它還將用于分別獲取 Groovy 編譯器及 Groovydoc 工具。
如果 Groovy 用于 production 代碼,Groovy 依賴應(yīng)該添加到 compile 配置中:
Groovy 的依賴配置
build.gradle
repositories {
mavenCentral()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.2.0'
}
如果 Groovy 僅用于測(cè)試代碼,Groovy 的依賴應(yīng)該被添加到 testCompile 配置中:
配置 Groovy 測(cè)試依賴
build.gradle
dependencies {
testCompile "org.codehaus.groovy:groovy-all:2.2.0"
}
如果要使用 Gradle 所帶的 Groovy 庫(kù),請(qǐng)聲明 localGroovy()依賴。注意,不同 Gradle 版本附帶的 Groovy 版本不同;因此,聲明一個(gè)固定的 Groovy 依賴要比使用 localGroovy()更安全一些。
配置捆綁的 Groovy 依賴
build.gradle
dependencies {
compile localGroovy()
}
Groovy 庫(kù)不一定得從遠(yuǎn)程倉(cāng)庫(kù)中獲取。它也可以獲取自本地中可能檢入版本控制的 lib 目錄:
配置 Groovy 文件依賴
build.gradle
repositories {
flatDir { dirs 'lib' }
}
dependencies {
compile module('org.codehaus.groovy:groovy:1.6.0') {
dependency('asm:asm-all:2.2.3')
dependency('antlr:antlr:2.7.7')
dependency('commons-cli:commons-cli:1.2')
module('org.apache.ant:ant:1.9.3') {
dependencies('org.apache.ant:ant-junit:1.9.3@jar', 'org.apache.ant:ant-launcher:1.9.3')
}
}
}
GroovyCompile 和 Groovydoc tasks 會(huì)以兩種方式使用 Groovy: 在它們的 classpath 以及它們的groovyClasspath上。前者用于在源代碼中查找類的引用,通常會(huì)包含 Groovy 庫(kù)和其他庫(kù)。后者用來(lái)分別加載和執(zhí)行 Groovy 編譯器和 Groovydoc 工具,并且應(yīng)該只包含 Groovy 庫(kù)及其依賴項(xiàng)。
除非顯式配置了一個(gè) task 的 groovyClasspath ,否則 Groovy(基礎(chǔ))插件會(huì)嘗試推斷該 task 的 classpath。以如下方式進(jìn)行:
Groovy 的插件沒有向 project 添加任何的常規(guī)屬性。
Groovy 的插件向 project 的每一個(gè)source set 添加了下列的常規(guī)屬性。你可以在你的構(gòu)建腳本中,把這些屬性當(dāng)成是 source set 對(duì)象中的屬性一樣使用。
表 24.4. Groovy 插件 - source set 屬性
屬性名稱 | 類型 | 默認(rèn)值 | 描述 |
groovy
|
SourceDirectorySet (read-only) | 非空 | 該source set 中的 Groovy 源文件。包含在 Groovy 源目錄中找到的所有的.java 文件,并排除所有其他類型的文件。 |
groovy.srcDirs
|
Set<File> . |
name /groovy] |
源目錄包含該 source set 中的 Groovy 源文件。此外可能還包含用于聯(lián)合編譯的 Java 源文件。 |
allGroovy
|
FileTree (read-only) | 非空 | 該source set 中的所有 Groovy 源文件。包含在 Groovy 源目錄中找到的所有的.groovy 文件。 |
這些屬性由一個(gè) GroovySourceSet 的約定對(duì)象提供。
Groovy 的插件還修改了一些 source set 的屬性:
表 24.5. Groovy 的插件 - source set 屬性
屬性名稱 | 修改的內(nèi)容 |
allJava
|
添加在 Groovy 源目錄中找到的所有.java 文件。 |
allSource
|
添加在 Groovy 的源目錄中找到的所有源文件。 |
Java 插件向 project 里的每個(gè) source set 添加了一個(gè) JavaCompile task。這個(gè) task 的類型繼承自 JavaCompile task。除非 groovyOptions.useAnt 設(shè)置為 true,否則將使用 Gradle 集成的本地的 Groovy 編譯器。對(duì)于大多數(shù)項(xiàng)目而言,這相比基于 Ant 編譯器,是個(gè)更好的選擇。GroovyCompile task 支持官方的 Groovy 編譯器的大多數(shù)配置選項(xiàng)。
表 24.6. Groovy 插件 - GroovyCompile 屬性
任務(wù)屬性 | 類型 | 默認(rèn)值 |
classpath
|
FileCollection |
sourceSet .compileClasspath |
source
|
FileTree |
sourceSet .groovy |
destinationDir
|
File . |
sourceSet .output.classesDir |
groovyClasspath
|
FileCollection | 如果classpath 中找到的 Groovy 庫(kù) |
更多建議: