Gradle Groovy 插件

2022-08-03 15:31 更新

Groovy 的插件繼承自 Java 插件并添加了對 Groovy 項目的支持。它可以處理 Groovy 代碼,以及混合的 Groovy 和 Java 代碼,甚至是純 Java 代碼(盡管我們不一定推薦使用)。該插件支持聯(lián)合編譯,可以任意地混合及匹配 Groovy 和 Java 代碼各自的依賴。例如,一個 Groovy 類可以繼承自一個 Java 類,而這個 Java 類也可以繼承自一個 Groovy 類。這樣一來,我們就能夠在項目中使用最適合的語言,并且在有需要的情況下用其他的語言重寫其中的任何類。

用法

要使用 Groovy 的插件,請在構(gòu)建腳本中包含以下語句:

使用 Groovy 插件

build.gradle

apply plugin: 'groovy'  

任務(wù)

Groovy 的插件向 project 中添加了以下任務(wù)。

表 24.1. Groovy 插件 - 任務(wù)

任務(wù)名稱 依賴于 類型 描述
compileGroovy compileJava GroovyCompile 編譯production 的 Groovy 源文件。
compileTestGroovy compileTestJava GroovyCompile 編譯test 的 Groovy 的源文件。
SourceSetGroovy SourceSetJava 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 的插件會假定項目的布局如表 24.3,“Groovy 插件 - 項目布局”中所示。所有 Groovy 的源目錄都可以包含 Groovy 和 Java 代碼。Java 源目錄只能包含 Java 源代碼。這些目錄不一定得存在或是里面包含有什么內(nèi)容;Groovy 的插件只會進(jìn)行編譯,而不管它發(fā)現(xiàn)什么。

表 24.3. Groovy 插件 - 項目布局

目錄 意義
src/main/java 產(chǎn)品的Java源代碼
src/main/resources 產(chǎn)品的資源
src/main/groovy Production Groovy 源代碼。此外可能包含聯(lián)合編譯的 Java 源代碼。
src/test/java Java 測試源代碼
src/test/resources 測試資源
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)建語言基于 Groovy 的,且部分的 Groovy 使用 Groovy 實(shí)現(xiàn),因此 Gradle 已經(jīng)帶有了一個 Groovy 庫 (截至 Gradle 1.6 所帶的 Groovy 庫的版本是 1.8.6)。然而,Groovy 項目需要顯式地聲明一個 Groovy 依賴。這個依賴會在編譯和運(yùn)行的類路徑時用到。它還將用于分別獲取 Groovy 編譯器及 Groovydoc 工具。

如果 Groovy 用于 production 代碼,Groovy 依賴應(yīng)該添加到 compile 配置中:

Groovy 的依賴配置

build.gradle
repositories {
    mavenCentral()
}
dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.2.0'
}  

如果 Groovy 僅用于測試代碼,Groovy 的依賴應(yīng)該被添加到 testCompile 配置中:

配置 Groovy 測試依賴

build.gradle

dependencies {
    testCompile "org.codehaus.groovy:groovy-all:2.2.0"
}   

如果要使用 Gradle 所帶的 Groovy 庫,請聲明 localGroovy()依賴。注意,不同 Gradle 版本附帶的 Groovy 版本不同;因此,聲明一個固定的 Groovy 依賴要比使用 localGroovy()更安全一些。

配置捆綁的 Groovy 依賴

build.gradle

dependencies {
    compile localGroovy()
}  

Groovy 庫不一定得從遠(yuǎn)程倉庫中獲取。它也可以獲取自本地中可能檢入版本控制的 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')
        }
    }
}  

groovyClasspath 的自動配置

GroovyCompile 和 Groovydoc tasks 會以兩種方式使用 Groovy: 在它們的 classpath 以及它們的groovyClasspath上。前者用于在源代碼中查找類的引用,通常會包含 Groovy 庫和其他庫。后者用來分別加載和執(zhí)行 Groovy 編譯器和 Groovydoc 工具,并且應(yīng)該只包含 Groovy 庫及其依賴項。

除非顯式配置了一個 task 的 groovyClasspath ,否則 Groovy(基礎(chǔ))插件會嘗試推斷該 task 的 classpath。以如下方式進(jìn)行:

  • 如果在在 classpath 中找到 groovy-all(-indy) Jar,相同的 Jar 將添加到groovyClasspath 中。
  • 如果在 classpath 中找到 groovy(-indy) Jar ,并且該項目已經(jīng)在至少一個倉庫中聲明了它,那么相應(yīng)的 groovy(-indy)的倉庫依賴將添加到 groovyClasspath 中。
  • 其他情況,該 task 將執(zhí)行失敗,并提示無法推斷 groovyClasspath。

常規(guī)屬性

Groovy 的插件沒有向 project 添加任何的常規(guī)屬性。

source set 屬性

Groovy 的插件向 project 的每一個source set 添加了下列的常規(guī)屬性。你可以在你的構(gòu)建腳本中,把這些屬性當(dāng)成是 source set 對象中的屬性一樣使用。

表 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文件。

這些屬性由一個 GroovySourceSet 的約定對象提供。

Groovy 的插件還修改了一些 source set 的屬性:

表 24.5. Groovy 的插件 - source set 屬性

屬性名稱 修改的內(nèi)容
allJava 添加在 Groovy 源目錄中找到的所有.java文件。
allSource 添加在 Groovy 的源目錄中找到的所有源文件。

GroovyCompile

Java 插件向 project 里的每個 source set 添加了一個 JavaCompile task。這個 task 的類型繼承自 JavaCompile task。除非 groovyOptions.useAnt 設(shè)置為 true,否則將使用 Gradle 集成的本地的 Groovy 編譯器。對于大多數(shù)項目而言,這相比基于 Ant 編譯器,是個更好的選擇。GroovyCompile task 支持官方的 Groovy 編譯器的大多數(shù)配置選項。

表 24.6. Groovy 插件 - GroovyCompile 屬性

任務(wù)屬性 類型 默認(rèn)值
classpath FileCollection sourceSet.compileClasspath
source FileTree sourceSet.groovy
destinationDir File. sourceSet.output.classesDir
groovyClasspath FileCollection 如果classpath 中找到的 Groovy 庫
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號