国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

第21章 Gradle Plugins 插件

2018-02-24 15:56 更新

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

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

21.1. Types of plugins 插件類型

Gradle 一般有兩種類型的插件 :script 插件和 binary 插件。script 插件是額外的構建腳本,用于進一步配置構建,以及實現一種聲明性方法操縱構建。他們通常用于構建雖然他們可以外部化和從遠程位置訪問。binary插件的類實現?Plugin?接口,采用的編程方法操縱構建。binary 插件通過項目層次結構或外部插件 jar 駐留在構建腳本中。

21.2. Applying plugins 應用插件

插件是可以被應用的,通過?Project.apply()?方法來完成。

21.2.1. Script plugins

Example 21.1. Applying a script plugin

build.gradle

apply from: 'other.gradle'

script 插件可以從本地文件系統(tǒng)或在遠程位置的腳本應用。文件位置是相對于項目目錄,而遠程腳本的位置是一個 HTTP URL 指定。多個腳本插件(或形式)可以應用到一個給定的建立。

21.2.2. Binary plugins

Example 21.2. Applying a binary plugin

build.gradle

apply plugin: 'java'

核心插件注冊一個簡短的名字。在上面的例子中,我們使用短名稱“java”來應用?JavaPlugin。插件也有插件ID,以一個完全合格的形式如 com.github.foo.bar,雖然一些遺留的插件還可以利用短期的,不合格的形式。

該方法還可以接受一個類識別插件:

Example 21.3. Applying a binary plugin by type

build.gradle

apply plugin: JavaPlugin

在上述樣本JavaPlugin 符號就是指?JavaPlugin。這類不需要嚴格引入 org.gradle.api.plugins 包在所有構建腳本會自動導入(見Appendix E. Existing IDE Support and how to cope without it 支持的 IDE 以及如何應對沒有它)。此外,不需要追加 .class 來確認這個類是在 Groovy 還是在 Java。

插件的應用是冪等。就是說一個插件,可多次應用。如果插件已被應用,任何進一步的應用將沒有任何效果。

21.2.2.1. Locations of binary plugins 關于 binary 插件的位置

一個插件是任意類實現?Plugin?接口。Gradle 提供核心插件為其分配部分簡單地應用插件來提供所有你需要做的。然而,非核心 binary 插件需要可用于構建類路徑才可以應用。這可以通過很多途徑實現,包括:

更多關于定義你自己的插件,見Chapter 59. Writing Custom Plugins 編寫自定義插件。

21.3. Applying plugins with the plugins DSL 使用DSL應用插件

插件DSL目前正在醞釀中。請注意,DSL和其他配置可能會在以后 Gradle版本改變。

新的插件提供了一個更簡潔的 DSL 和方便的方式來聲明插件的依賴關系。它的工作原理與新的?Gradle 插件門戶?提供方便地訪問核心和社區(qū)插件。插件腳本塊配置實例?PluginDependenciesSpec。

申請一個核心插件,可以使用短名稱:

Example 21.4. Applying a core plugin

build.gradle

plugins {
    id 'java'
}

通過To apply a community plugin from the portal, the fully qualified plugin id must be used:

Example 21.5. Applying a community plugin

build.gradle

plugins {
    id "com.jfrog.bintray" version "0.4.1"
}

不需要進一步配置。具體來說,不需要配置 buildscript 類路徑。Gradle將在插件門戶解決插件,找到它,使它可用于構建。

有關更多信息,請參見?PluginDependenciesSpec?使用插件的 DSL。

21.4. Finding community plugins 尋找社區(qū)插件

Gradle 至今有一個充滿活力的社區(qū)插件開發(fā)人員貢獻為各種功能的插件。Gradle?插件門戶提供了一個接口用于搜索和探索社區(qū)插件。

21.5. What plugins do 插件做啥

把插件應用到項目中可以讓插件來擴展項目的功能。它可以做的事情如:

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

舉例

Example 21.6. Tasks added by a plugin

build.gradle

apply plugin: 'java'

task show << {
    println relativePath(compileJava.destinationDir)
    println relativePath(processResources.destinationDir)
}

執(zhí)行 gradle -q show

> gradle -q show
build/classes/main
build/resources/main

這個 Java 插件增加了 compileJava 任務 processResources 任務到項目中,以及給這兩個任務配置 destinationDir 屬性。

21.6. Conventions 約定

插件可以通過智能的方法對項目進行預配置以支持約定優(yōu)于配置。Gradle 對此提供了機制和完善的支持,而它是強大-然而-簡潔的構建腳本中的一個關鍵因素。

在上面的示例中我們看到,Java 插件添加了一個任務,名字為compileJava ,有一個名為 destinationDir 的屬性(即配置編譯的 Java 代碼存放的地方)。Java 插件默認此屬性指向項目目錄中的build/classes/main。這是通過一個合理的默認的約定優(yōu)于配置的例子。

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

Example 21.7. Changing plugin defaults

build.gradle

apply plugin: 'java'

compileJava.destinationDir = file("$buildDir/output/classes")

task show << {
    println relativePath(compileJava.destinationDir)
}

執(zhí)行 gradle -q show

> gradle -q show
build/output/classes

然而, compileJava 任務很可能不是唯一需要知道類文件在哪里的任務。

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

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

Example 21.8. Plugin convention object

build.gradle

apply plugin: 'java'

sourceSets.main.output.classesDir = file("$buildDir/output/classes")

task show << {
    println relativePath(compileJava.destinationDir)
}

執(zhí)行 gradle -q show

> gradle -q show
build/output/classes

在上面的示例中,我們應用 Java 插件,除其他外,還做了下列操作:

  • 添加了一個新的域對象類型:?SourceSet
  • 通過屬性的默認(即常規(guī))配置了 main 源碼集
  • 配置支持使用這些屬性來執(zhí)行工作的任務

所有這一切都發(fā)生在?apply plugin: "java"這一步過程中。在上面例子中,我們在約定配置被執(zhí)行之后,修改了類文件所需的位置。在上面的示例中可以注意到,compileJava.destinationDir 的值也被修改了,以反映出配置的修改。

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

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

21.7. More on plugins 更多插件

這一章旨在作為對插件和 Gradle 及他們扮演的角色的導言。關于插件的內部運作的詳細信息,請參閱Chapter 59. Writing Custom Plugins 編寫自定義插件

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號