Gradle 1.12使用者指南翻譯——第二十一章. Gradle 外掛程式,gradle1.12

來源:互聯網
上載者:User

Gradle 1.12使用者指南翻譯——第二十一章. Gradle 外掛程式,gradle1.12

昨天晚上只顧著和女朋友看《匆匆那年》電視劇的最後幾集,所以說好的Android文檔《Gradle 外掛程式使用者指南》第五章自然也沒翻譯多少。所以今天也發不了第五章的翻譯了,就發幾個星期前譯好的《Gradle 1.12使用者指南》的第二十一章吧。

在部落格上發的其他章節的翻譯請參見:

http://blog.csdn.net/column/details/gradle-translation.html

翻譯項目請關注Github上的地址:

https://github.com/msdx/gradledoc/tree/1.12。

直接瀏覽雙語版的文檔請訪問:

http://gradledoc.qiniudn.com/1.12/userguide/userguide.html。

另外,Android 手機使用者可通過我寫的一個程式瀏覽文檔,帶緩衝功能的,相容2.1以上(5.0沒試過)的Android系統,地址如下:

http://www.wandoujia.com/apps/com.githang.gradledoc

翻譯不易,轉載請註明本文在CSDN部落格上的出處:

http://blog.csdn.net/maosidiaoxian/article/details/41977599

關於我對Gradle的翻譯,以Github上的項目及http://gradledoc.qiniudn.com 上的文檔為準。如有發現翻譯有誤的地方,將首先在以上兩個地方更新。因時間精力問題,部落格中發表的譯文基本不會同步修改。


第二十一章. Gradle 外掛程式

Gradle 在它的核心中有意地提供了一些小但有用的功能,用於在真實世界中的自動化。所有有用的功能,例如以能夠編譯 Java 代碼為例,都是通過外掛程式進行添加的。外掛程式添加了新任務 (例如JavaCompile),域對象 (例如SourceSet),約定(例如主要的 Java 原始碼是位於src/main/java),以及擴充的核心對象和其他外掛程式的對象。

在這一章中,我們將討論如何使用外掛程式以及術語和外掛程式相關的概念。

21.1. 應用外掛程式

外掛程式都認為是被應用,通過Project.apply()方法來完成。

樣本 21.1. 應用外掛程式

build.gradle

apply plugin: 'java'

外掛程式都有表示它們自己的一個簡短名稱。. 在上述例子中,我們使用簡短名稱java去應用JavaPlugin

我們還可以使用下面的文法:

樣本 21.2. 通過類型應用外掛程式

build.gradle

apply plugin: org.gradle.api.plugins.JavaPlugin

由於 Gradle 的預設匯入 (見附錄 E,現有的 IDE 支援和如何應對不支援的情況),您還可以這樣寫:

樣本 21.3. 通過類型應用外掛程式

build.gradle

apply plugin: JavaPlugin

外掛程式的應用是等冪的。也就是說,一個外掛程式可以被應用多次。如果以前已應用了該外掛程式,任何進一步的應用都不會再有任何效果。

一個外掛程式是任何實現了 Plugin 介面的簡單的類。Gradle 提供了核心外掛程式作為其發行包的一部分,所以簡單地應用如上外掛程式是你所需要做的。然而,對於第三方外掛程式,你需要進行配置以使外掛程式在構建類路徑中可用。有關如何進行此操作的詳細資料,請參閱 59.5章節,“構建指令碼的外部依賴”。

關於編寫自己的外掛程式的詳細資料,請參閱 58章節,編寫自訂外掛程式

21.2. 外掛程式都做了什麼

把外掛程式應用到項目中可以讓外掛程式來擴充項目的功能。它可以做的事情如:

  • 將任務添加到項目 (如編譯、 測試)
  • 使用有用的預設設定對已添加的任務進行預配置。
  • 向項目中添加依賴配置 (見第 8.3 節,“依賴配置”)。
  • 通過擴充對現有類型添加新的屬性和方法。

讓我們來看看:

樣本 21.4. 通過外掛程式新增工作

build.gradle

apply plugin: 'java'task show << {    println relativePath(compileJava.destinationDir)    println relativePath(processResources.destinationDir)}

gradle -q show 的輸出結果

> gradle -q showbuild/classes/mainbuild/resources/main

Java 外掛程式已經向項目添加了 compileJava任務和processResources任務,並且配置了這兩個任務的destinationDir屬性。

21.3. 約定

外掛程式可以通過智能的方法對項目進行預配置以支援約定優於配置。Gradle 對此提供了機制和完善的支援,而它是強大-然而-簡潔的構建指令碼中的一個關鍵因素。

在上面的樣本中我們看到,Java 外掛程式添加了一個任務,名字為compileJava ,有一個名為destinationDir 的屬性(即配置編譯的 Java 代碼存放的地方)。Java 外掛程式預設此屬性指向項目目錄中的build/classes/main。這是通過一個合理的預設的約定優於配置的例子。

我們可以簡單地通過給它一個新的值來更改此屬性。

樣本 21.5. 更改外掛程式的預設設定

build.gradle

apply plugin: 'java'compileJava.destinationDir = file("$buildDir/output/classes")task show << {    println relativePath(compileJava.destinationDir)}

gradle -q show 的輸出結果

> gradle -q showbuild/output/classes

然而, compileJava任務很可能不是唯 一需要知道類檔案在哪裡的任務。

Java 外掛程式添加了 source sets 的概念 (見SourceSet) 來描述的源檔案集的各個方面,其中一個方面是在編譯的時候這些類檔案應該被寫到哪個地方。Java 外掛程式將compileJava任務的destinationDir屬性對應到源檔案集的這一個方面。

我們可以通過這個源碼集修改寫入類檔案的位置。

樣本 21.6. 外掛程式中的約定對象

build.gradle

apply plugin: 'java'sourceSets.main.output.classesDir = file("$buildDir/output/classes")task show << {    println relativePath(compileJava.destinationDir)}

gradle -q show 的輸出結果

> gradle -q showbuild/output/classes

在上面的樣本中,我們應用 Java 外掛程式,除其他外,還做了下列操作:

  • 添加了一個新的域物件類型: SourceSet
  • 通過屬性的預設(即常規)配置了 main 源碼集
  • 配置支援使用這些屬性來執行工作的任務

所有這一切都發生在apply plugin: "java"這一步過程中。在上面例子中,我們在約定配置被執行之後,修改了類檔案所需的位置。在上面的樣本中可以注意到,compileJava.destinationDir的值也被修改了,以反映出配置的修改。

考慮一下另一種消費類檔案的任務的情況。如果這個任務使用sourceSets.main.output.classesDir的值來配置,那麼修改了這個位置的值,無論它是什麼時候被修改,將同時更新compileJava任務和這一個消費者任務。

這種設定物件的屬性以在所有時間內(甚至當它更改的時候)反映另一個對象的任務的值的能力被稱為“映射約定”。它可以令 Gradle 通過約定優於配置及合理的預設值來實現簡潔的配置方式。而且,如果預設約定需要進行修改時,也不需要進行完全的重新設定。如果沒有這一點,在上面的例子中,我們將不得不重新設定需要使用類檔案的每個對象。

21.4.
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.