在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 物聯(lián)網(wǎng)/ 從 Gradle 中調(diào)用 Ant
問題反饋
Gradle 插件
Scala 插件
Gradle 命令行的基本使用
任務(wù)詳述
安裝
概述
教程-雜七雜八
構(gòu)建環(huán)境
依賴管理基礎(chǔ)
使用 Gradle 圖形用戶界面
使用文件
CodeNarc 插件
Sonar 插件
Groovy 插件
Sonar Runner 插件
OSGi 插件
Ear 插件
Gradle 守護(hù)進(jìn)程
Java 插件
簡(jiǎn)介
構(gòu)建基礎(chǔ)
FindBugs 插件
Groovy 快速入門
JaCoCo 插件
PMD 插件
War 插件
Checkstyle 插件
日志
Java 構(gòu)建入門
Jetty 插件
從 Gradle 中調(diào)用 Ant
標(biāo)準(zhǔn)的 Gradle 插件
Web 工程構(gòu)建
JDepend 插件
編寫構(gòu)建腳本

從 Gradle 中調(diào)用 Ant

Gradle 提供了對(duì) Ant 的優(yōu)秀集成您可以在你的 Gradle 構(gòu)建中,使用單獨(dú)的 Ant 任務(wù)或整個(gè) Ant 構(gòu)建。事實(shí)上,你會(huì)發(fā)現(xiàn)在 Gradle 中使用 Ant 任務(wù)比使用 Ant 的 XML 格式更容易也更強(qiáng)大。你甚至可以只把 Gradle 當(dāng)作一個(gè)強(qiáng)大的 Ant 任務(wù)腳本的工具。

Ant 可以分為兩層。第一層是 Ant 的語言。它提供了用于 build.xml,處理的目標(biāo),特殊的構(gòu)造方法比如宏,還有其他等等的語法。換句話說,除了 Ant 任務(wù)和類型之外全部都有。Gradle 理解這種語言,并允許您直接導(dǎo)入你的 Ant build.xml 到 Gradle 項(xiàng)目中。然后你可以使用你的 Ant 構(gòu)建中的 target,就好像它們是 Gradle 任務(wù)一樣。

Ant 的第二層是其豐富的 Ant 任務(wù)和類型,如 javac、copy 或 jar。這一層 Gradle 單靠 Groovy 和不可思議的 AntBuilder,對(duì)其提供了集成。

最后,由于構(gòu)建腳本是 Groovy 腳本,所以您始終可以作為一個(gè)外部進(jìn)程來執(zhí)行 Ant 構(gòu)建。你的構(gòu)建腳本可能包含有類似這樣的語句:"ant clean compile".execute()。[8]

你可以把 Gradle 的 Ant 集成當(dāng)成一個(gè)路徑,將你的構(gòu)建從 Ant 遷移至 Gradle 。例如,你可以通過導(dǎo)入您現(xiàn)有的 Ant 構(gòu)建來開始。然后,可以將您的依賴聲明從 Ant 腳本移到您的構(gòu)建文件。最后,您可以將整個(gè)任務(wù)移動(dòng)到您的構(gòu)建文件,或者把它們替換為一些 Gradle 插件。這個(gè)過程可以隨著時(shí)間一點(diǎn)點(diǎn)完成,并且在這整個(gè)過程當(dāng)中你的 Gradle 構(gòu)建都可以使用用。

在構(gòu)建中使用 Ant 任務(wù)和類型

在構(gòu)建腳本中,Gradle 提供了一個(gè)名為 ant 的屬性。它指向一個(gè) AntBuilder 實(shí)例。AntBuilder 用于從你的構(gòu)建腳本中訪問 Ant 任務(wù)、 類型和屬性。從 Ant 的 build.xml 格式到 Groovy 之間有一個(gè)非常簡(jiǎn)單的映射,下面解釋。

通過調(diào)用 AntBuilder實(shí)例上的一個(gè)方法,可以執(zhí)行一個(gè) Ant 任務(wù)。你可以把任務(wù)名稱當(dāng)作方法名稱使用。例如,你可以通過調(diào)用ant.echo()方法執(zhí)行 Ant 的 echo 任務(wù)。Ant 任務(wù)的屬性會(huì)作為 Map 參數(shù)傳給該方法。下面是執(zhí)行 echo 任務(wù)的例子。請(qǐng)注意我們還可以混合使用 Groovy 代碼和 Ant 任務(wù)標(biāo)記。這將會(huì)非常強(qiáng)大。

使用 Ant 任務(wù)

build.gradle

task hello << {
    String greeting = 'hello from Ant'
    ant.echo(message: greeting)
}  

gradle hello 的輸出結(jié)果

> gradle hello
:hello
[ant:echo] hello from Ant
BUILD SUCCESSFUL
Total time: 1 secs  

你可以把一個(gè)嵌套文本,通過作為任務(wù)方法調(diào)用的參數(shù),把它傳給一個(gè) Ant 任務(wù)。在此示例中,我們將把作為嵌套文本的消息傳給 echo 任務(wù):

向 Ant 任務(wù)傳入嵌套文本

build.gradle

task hello << {
    ant.echo('hello from Ant')
}  

gradle hello 的輸出結(jié)果

> gradle hello
:hello
[ant:echo] hello from Ant
BUILD SUCCESSFUL
Total time: 1 secs  

你可以在一個(gè)閉包里把嵌套的元素傳給一個(gè) Ant 任務(wù)。嵌套元素的定義方式與任務(wù)相同,通過調(diào)用與我們要定義的元素一樣的名字的方法。

向 Ant 任務(wù)傳入嵌套元素

build.gradle

task zip << {
    ant.zip(destfile: 'archive.zip') {
        fileset(dir: 'src') {
            include(name: '**.xml')
            exclude(name: '**.java')
        }
    }
}    

您可以用訪問任務(wù)同樣的方法,把類型名字作為方法名稱,訪問 Ant 類型。方法調(diào)用返回 Ant 數(shù)據(jù)類型,然后可以在構(gòu)建腳本中直接使用。在以下示例中,我們創(chuàng)建一個(gè) Ant 的 path 對(duì)象,然后循環(huán)訪問它的內(nèi)容。

使用 Ant 類型

build.gradle

task list << {
    def path = ant.path {
        fileset(dir: 'libs', includes: '*.jar')
    }
    path.list().each {
        println it
    }
}  

在您的構(gòu)建中使用自定義 Ant 任務(wù)

要使自定義任務(wù)在您的構(gòu)建中可用,你可以使用 Ant 任務(wù) taskdef(通常更容易) 或typedef,就像在 build.xml 文件中一樣。然后,您可以像引用內(nèi)置的 Ant 任務(wù)一樣引用自定義 Ant 任務(wù)。

使用自定義 Ant 任務(wù)

build.gradle

task check << {
    ant.taskdef(resource: 'checkstyletask.properties') {
        classpath {
            fileset(dir: 'libs', includes: '*.jar')
        }
    }
    ant.checkstyle(config: 'checkstyle.xml') {
        fileset(dir: 'src')
    }
}  

你可以使用 Gradle 的依賴管理組合類路徑,以用于自定義任務(wù)。要做到這一點(diǎn),你需要定義一個(gè)自定義配置的類路徑中,然后將一些依賴項(xiàng)添加到配置中。

聲明用于自定義 Ant 任務(wù)的類路徑

build.gradle

configurations {
    pmd
}
dependencies {
    pmd group: 'pmd', name: 'pmd', version: '4.2.5'
}  

若要使用類路徑配置,請(qǐng)使用自定義配置里的 asPath 屬性。

同時(shí)使用自定義 Ant 任務(wù)和依賴管理

build.gradle

task check << {
    ant.taskdef(name: 'pmd', classname: 'net.sourceforge.pmd.ant.PMDTask', classpath: configurations.pmd.asPath)
    ant.pmd(shortFilenames: 'true', failonruleviolation: 'true', rulesetfiles: file('pmd-rules.xml').toURI().toString()) {
        formatter(type: 'text', toConsole: 'true')
        fileset(dir: 'src')
    }
}  

導(dǎo)入 Ant 構(gòu)建

你可以使用 ant.importBuild()方法來向 Gradle 項(xiàng)目導(dǎo)入一個(gè) Ant 構(gòu)建。當(dāng)您導(dǎo)入一個(gè) Ant 構(gòu)建時(shí),每個(gè) Ant 目標(biāo)被視為一個(gè) Gradle 任務(wù)。這意味著你可以用與 Gradle 任務(wù)完全相機(jī)的方式操縱和執(zhí)行 Ant 目標(biāo)。

導(dǎo)入 Ant 構(gòu)建

build.gradle

ant.importBuild 'build.xml'
build.xml
<project>
    <target name="hello">
        <echo>Hello, from Ant</echo>
    </target>
</project>  

gradle hello 的輸出結(jié)果

> gradle hello
:hello
[ant:echo] Hello, from Ant
BUILD SUCCESSFUL
Total time: 1 secs  

您可以添加一個(gè)依賴于 Ant 目標(biāo)的任務(wù):

依賴于 Ant 目標(biāo)的任務(wù)

build.gradle

ant.importBuild 'build.xml'
task intro(dependsOn: hello) << {
    println 'Hello, from Gradle'
}  

gradle intro 的輸出結(jié)果

> gradle intro
:hello
[ant:echo] Hello, from Ant
:intro
Hello, from Gradle
BUILD SUCCESSFUL
Total time: 1 secs  

或者,您可以將行為添加到 Ant 目標(biāo)中:

將行為添加到 Ant 目標(biāo)

build.gradle

ant.importBuild 'build.xml'
hello << {
    println 'Hello, from Gradle'
}  

gradle hello 的輸出結(jié)果

> gradle hello
:hello
[ant:echo] Hello, from Ant
Hello, from Gradle
BUILD SUCCESSFUL
Total time: 1 secs  

它也可以用于一個(gè)依賴于 Gradle 任務(wù)的 Ant 目標(biāo):

依賴于 Gradle 任務(wù)的 Ant 目標(biāo)

build.gradle

ant.importBuild 'build.xml'
task intro << {
    println 'Hello, from Gradle'
}
build.xml
<project>
    <target name="hello" depends="intro">
        <echo>Hello, from Ant</echo>
    </target>
</project>  

gradle hello 的輸出結(jié)果

> gradle hello
:intro
Hello, from Gradle
:hello
[ant:echo] Hello, from Ant
BUILD SUCCESSFUL
Total time: 1 secs  

Ant 屬性和引用

有幾種方法來設(shè)置 Ant 屬性,以便使該屬性被 Ant 任務(wù)使用。你可以直接在 AntBuilder 實(shí)例上設(shè)置屬性。Ant 屬性也可以從一個(gè)你可以修改的 Map 中獲得。您還可以使用 Ant property 任務(wù)。下面是一些如何做到這一點(diǎn)的例子。

Ant 屬性設(shè)置

build.gradle

ant.buildDir = buildDir
ant.properties.buildDir = buildDir
ant.properties['buildDir'] = buildDir
ant.property(name: 'buildDir', location: buildDir)
build.xml
<echo>buildDir = ${buildDir}</echo>  

許多 Ant 任務(wù)在執(zhí)行時(shí)會(huì)設(shè)置一些屬性。有幾種方法來獲取這些屬性值。你可以直接從AntBuilder 實(shí)例獲得屬性。Ant 屬性也可作為一個(gè) Map。下面是一些例子。

獲取 Ant 屬性

build.xml

<property name="antProp" value="a property defined in an Ant build"/>
build.gradle
println ant.antProp
println ant.properties.antProp
println ant.properties['antProp']  

有幾種方法可以設(shè)置 Ant 引用:

Ant 引用設(shè)置

build.gradle

ant.path(id: 'classpath', location: 'libs')
ant.references.classpath = ant.path(location: 'libs')
ant.references['classpath'] = ant.path(location: 'libs')
build.xml
<path refid="classpath"/>  

有幾種方法可以獲取 Ant 引用:

獲取 Ant 引用

build.xml

<path id="antPath" location="libs"/>
build.gradle
println ant.references.antPath
println ant.references['antPath']