Groovy 的插件繼承自 Java 插件并添加了對(duì) Groovy 項(xiàng)目的支持。它可以處理 Groovy 代碼,以及混合的 Groovy 和 Java 代碼,甚至是純 Java 代碼(盡管我們不一定推薦使用)。該插件支持聯(lián)合編譯,可以任意地混合及匹配 Groovy 和 Java 代碼各自的依賴(lài)。例如,一個(gè) Groovy 類(lèi)可以繼承自一個(gè) Java 類(lèi),而這個(gè) Java 類(lèi)也可以繼承自一個(gè) Groovy 類(lèi)。這樣一來(lái),我們就能夠在項(xiàng)目中使用最適合的語(yǔ)言,并且在有需要的情況下用其他的語(yǔ)言重寫(xiě)其中的任何類(lèi)。
要使用 Groovy 的插件,請(qǐng)?jiān)跇?gòu)建腳本中包含以下語(yǔ)句:
使用 Groovy 插件
build.gradle
apply plugin: 'groovy'
Groovy 的插件向 project 中添加了以下任務(wù)。
表 24.1. Groovy 插件 - 任務(wù)
任務(wù)名稱(chēng) | 依賴(lài)于 | 類(lèi)型 | 描述 |
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 添加了以下的依賴(lài)。
表 24.2. Groovy 插件 - 額外的 task 依賴(lài)
任務(wù)名稱(chēng) | 依賴(lài)于 |
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 依賴(lài)。這個(gè)依賴(lài)會(huì)在編譯和運(yùn)行的類(lèi)路徑時(shí)用到。它還將用于分別獲取 Groovy 編譯器及 Groovydoc 工具。
如果 Groovy 用于 production 代碼,Groovy 依賴(lài)應(yīng)該添加到 compile 配置中:
Groovy 的依賴(lài)配置
build.gradle
repositories {
mavenCentral()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.2.0'
}
如果 Groovy 僅用于測(cè)試代碼,Groovy 的依賴(lài)應(yīng)該被添加到 testCompile 配置中:
配置 Groovy 測(cè)試依賴(lài)
build.gradle
dependencies {
testCompile "org.codehaus.groovy:groovy-all:2.2.0"
}
如果要使用 Gradle 所帶的 Groovy 庫(kù),請(qǐng)聲明 localGroovy()依賴(lài)。注意,不同 Gradle 版本附帶的 Groovy 版本不同;因此,聲明一個(gè)固定的 Groovy 依賴(lài)要比使用 localGroovy()更安全一些。
配置捆綁的 Groovy 依賴(lài)
build.gradle
dependencies {
compile localGroovy()
}
Groovy 庫(kù)不一定得從遠(yuǎn)程倉(cāng)庫(kù)中獲取。它也可以獲取自本地中可能檢入版本控制的 lib 目錄:
配置 Groovy 文件依賴(lài)
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ì)以?xún)煞N方式使用 Groovy: 在它們的 classpath 以及它們的groovyClasspath上。前者用于在源代碼中查找類(lèi)的引用,通常會(huì)包含 Groovy 庫(kù)和其他庫(kù)。后者用來(lái)分別加載和執(zhí)行 Groovy 編譯器和 Groovydoc 工具,并且應(yīng)該只包含 Groovy 庫(kù)及其依賴(lài)項(xiàng)。
除非顯式配置了一個(gè) task 的 groovyClasspath ,否則 Groovy(基礎(chǔ))插件會(huì)嘗試推斷該 task 的 classpath。以如下方式進(jìn)行:
Groovy 的插件沒(méi)有向 project 添加任何的常規(guī)屬性。
Groovy 的插件向 project 的每一個(gè)source set 添加了下列的常規(guī)屬性。你可以在你的構(gòu)建腳本中,把這些屬性當(dāng)成是 source set 對(duì)象中的屬性一樣使用。
表 24.4. Groovy 插件 - source set 屬性
屬性名稱(chēng) | 類(lèi)型 | 默認(rèn)值 | 描述 |
groovy
|
SourceDirectorySet (read-only) | 非空 | 該source set 中的 Groovy 源文件。包含在 Groovy 源目錄中找到的所有的.java 文件,并排除所有其他類(lèi)型的文件。 |
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 屬性
屬性名稱(chēng) | 修改的內(nèi)容 |
allJava
|
添加在 Groovy 源目錄中找到的所有.java 文件。 |
allSource
|
添加在 Groovy 的源目錄中找到的所有源文件。 |
Java 插件向 project 里的每個(gè) source set 添加了一個(gè) JavaCompile task。這個(gè) task 的類(lèi)型繼承自 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ù)屬性 | 類(lèi)型 | 默認(rèn)值 |
classpath
|
FileCollection |
sourceSet .compileClasspath |
source
|
FileTree |
sourceSet .groovy |
destinationDir
|
File . |
sourceSet .output.classesDir |
groovyClasspath
|
FileCollection | 如果classpath 中找到的 Groovy 庫(kù) |
更多建議: