【Gradle官方文檔翻譯】起步1:創(chuàng)建Gradle構建

內容

跟隨本教程悼瓮,您將創(chuàng)建出一個簡單的Gradle項目验庙、調用一些基礎的Gradle命令随闽,并對Gradle如何進行項目管理有初步的了解垫卤。

準備工作

  • 大約12分鐘的時間

  • 控制臺或IDE應用程序

  • Java開發(fā)套件(JDK)威彰,如果要使用Gradle Groovy DSL需要1.7或更高版本,如果要使用Gradle Kotlin
    DSL則需要1.8或更高版本(僅在運行Gradle時需要)

  • Gradle的發(fā)行版穴肘,4.10-rc-2以上版本

shell命令行會以類Unix操作系統(tǒng)的樣子展示歇盼。每條命令在Windows下都有對應的等效命令。

初始化一個項目

首先评抚,我們?yōu)轫椖縿?chuàng)建一個目錄豹缀。

? mkdir basic-demo
? cd basic-demo

現在,我們可以使用Gradle的 init 命令簡單地創(chuàng)建一個項目慨代。我們會探尋所有生成出來的東西從而使您完全明白都發(fā)生了些什么耿眉。

? gradle init ①
Starting a Gradle Daemon (subsequent builds will be faster)

BUILD SUCCESSFUL in 3s
2 actionable tasks: 2 executed

① 如果您想使用Kotlin DSL,那么請使用 gradle init --dsl kotlin鱼响。更多詳情參考文檔

命令行會顯示“BUILD SUCCESSFUL”并生成下文所示的“空”項目组底。如果不是這樣丈积,那么請確認Gradle是不是
正確安裝了筐骇,以及 JAVA_HOME 環(huán)境變量是否正確地設置了。

Gradle為你生成了這些東西:

Groovy

├── build.gradle  (1)
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar  (2)
│       └── gradle-wrapper.properties  (3)
├── gradlew  (4)
├── gradlew.bat  (5)
└── settings.gradle  (6)

Kotlin

├── build.gradle.kts  (1)
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar  (2)
│       └── gradle-wrapper.properties  (3)
├── gradlew  (4)
├── gradlew.bat  (5)
└── settings.gradle.kts  (6)
  1. 配置了當前項目任務的項目配置腳本
  2. Gradle包裝器可執(zhí)行JAR包
  3. Gradle包裝器配置信息
  4. Gradle包裝器在類Unix操作系統(tǒng)下的腳本
  5. Gradle包裝器在Windows操作系統(tǒng)下的腳本
  6. 配置構建中參與項目的配置腳本

gradle init 可以生成多種不同類型的項目江滨,甚至知道如何將簡單的pom.xml 文件翻譯成Gradle支持的方式铛纬。

當當當當!我們的教程到這里就可以結束了唬滑。但你肯定要知道如何在項目中 使用 Gradle告唆,所以讓我們繼續(xù)吧。

創(chuàng)建一個任務

Gradle提供了通過基于Groovy或Kotlin的DSL創(chuàng)建和配置任務的API晶密。Project 包含了一系列Task擒悬,每個任務都會執(zhí)行一些基礎操作。
Gradle附帶一個可以用來配置自有項目的任務庫稻艰。例如叫做 Copy 的一個核心種類懂牧,可以將文件從某個位置復制到另一處。Copy任務是非常有用的(參考相關文檔獲取更多信息)尊勿,但是現在僧凤,再一次,讓我們保持簡單元扔。執(zhí)行如下步驟:

  1. 創(chuàng)建名為 src 的目錄躯保。
  2. src 文件夾添加名為 myfile.txt 的文件。其內容隨意(甚至可以為空)澎语,但現在為了方便途事,就添加一行 Hello, World! 吧。
  3. 在構建文件中定義一個 Copy 類型的 copy 任務(注意大小寫)咏连,用于將所有 src 目錄下的文件復制到一個名為dest 的新文件夾里盯孙。(開發(fā)者無需自行創(chuàng)建 dest文件夾,任務會自動幫你創(chuàng)建祟滴。)

Groovy

task copy(type: Copy, group: "Custom", description: "Copies sources to the dest directory") {
    from "src"
    into "dest"
}

Kotlin

tasks.create<Copy>("copy") {
    description = "Copies sources to the dest directory"
    group = "Custom"

    from("src")
    into("dest")
}

在這里振惰,groupdescription 可以換成任何你需要的。甚至你也可以省略它們垄懂,但這樣做會導致它們在稍后我們將要使用的tasks 報告中被省略骑晶。

現在讓我們來執(zhí)行這個 copy 任務:

? ./gradlew copy
> Task :copy

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

檢查 dest 目錄下有沒有 myfile.txt 文件,并驗證內容是否一致草慧。

使用插件

Gradle包含一大堆插件桶蛔,而且還有很多很多插件在Gradle插件門戶提供。跟隨發(fā)行版提供的插件之一是base 插件漫谷。結合 Zip核心類型仔雷,開發(fā)者就可以配置名稱、位置來給項目打zip包了。

使用 plugins 語法來給你的構建文件添加 base 插件碟婆。確保要在文件頭部添加 plugins {} 代碼塊电抚。

Gradle

plugins {
    id "base"
}

... 構建文件的其他部分 ...

Kotlin

plugins {
    id("base")
}

... 構建文件的其他部分 ...

現在,添加將 src 目錄打成zip包的任務:

Gradle

task zip(type: Zip, group: "Archive", description: "Archives sources in a zip file") {
    from "src"
    setArchiveName "basic-demo-1.0.zip"
}

Kotlin

tasks.create<Zip>("zip") {
    description = "Archives sources in a zip file")
    group = "Archive"

    from("src")
    setArchiveName("basic-demo-1.0.zip")
}

base 插件和設置協(xié)同工作竖共,可以在 build/distributions 文件夾下創(chuàng)建打包后的文件basic-demo-1.0.zip蝙叛。

現在,簡單地運行新添加的 zip任務公给,就能在對應位置看到生成的zip文件了借帘。

? ./gradlew zip
> Task :zip
    
BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

構建的瀏覽或調試

讓我們來看看Gradle在我們的新項目中還能做些什么。我們也提供了完整的命令行接口參考手冊淌铐。

發(fā)掘可用的任務

tasks 命令會列出所有可用的Gradle任務肺然,包括通過 base 插件引入的任務和我們剛剛添加的那些自定義任務。

? ./gradlew tasks

> Task :tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Archive tasks
-------------
zip - Archives sources in a zip file

Build tasks
-----------
assemble - Assembles the outputs of this project.
build - Assembles and tests this project.
clean - Deletes the build directory.

Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.

Custom tasks
------------
copy - Simply copies sources to a the build directory

Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'basic-demo'.
components - Displays the components produced by root project 'basic-demo'. [incubating]
dependencies - Displays all dependencies declared in root project 'basic-demo'.
dependencyInsight - Displays the insight into a specific dependency in root project 'basic-demo'.
dependentComponents - Displays the dependent components of components in root project 'basic-demo'. [incubating]
help - Displays a help message.
model - Displays the configuration model of root project 'basic-demo'. [incubating]
projects - Displays the sub-projects of root project 'basic-demo'.
properties - Displays the properties of root project 'basic-demo'.
tasks - Displays the tasks runnable from root project 'basic-demo'.

Verification tasks
------------------
check - Runs all checks.

Rules
-----
Pattern: clean<TaskName>: Cleans the output files of a task.
Pattern: build<ConfigurationName>: Assembles the artifacts of a configuration.
Pattern: upload<ConfigurationName>: Assembles and uploads the artifacts belonging to a configuration.

To see all tasks and more detail, run gradlew tasks --all

To see more detail about a task, run gradlew help --task <task>

BUILD SUCCESSFUL in 0s
1 actionable task: 1 executed

構建的分析和調試

Gradle同時也提供了一個豐富的匣沼、基于web的頁面用于展示你的構建狰挡,其名為構建掃描

構建掃描的基礎Demo

通過使用 --scan參數或明確地在項目中啟用構建掃描插件释涛,你可以在scans.gradle.com免費地創(chuàng)建一個構建掃描加叁。將構建掃描發(fā)布到scans.gradle.com會將這些數據發(fā)送至Gradle服務器。要想使數據停留在您自己的服務器上唇撬,請考慮Gradle企業(yè)版它匕。

嘗試在執(zhí)行一個任務的時候加入 --scan 選項。

? ./gradlew zip --scan

BUILD SUCCESSFUL in 0s
1 actionable task: 1 up-to-date

Publishing a build scan to scans.gradle.com requires accepting the Terms of Service defined at https://scans.gradle.com/terms-of-service. Do you accept these terms? [yes, no]
Gradle Cloud Services license agreement accepted.

Publishing build scan...
https://gradle.com/s/repnge6srr5qs

通過瀏覽構建掃描結果窖认,你可以輕松地看到那些任務被執(zhí)行了豫柬、每個任務執(zhí)行的耗時、使用了哪些插件等等扑浸。當下次你在StackOverflow上調試什么東西的時候烧给,考慮分享一下構建掃描。

構建掃描插件用戶手冊上可以學到更多關于構建掃描插件的配置和使用信息喝噪。

列舉可用屬性

properties 命令會告訴你項目的參數础嫡。

? ./gradlew properties

輸出結果非常長。下面是可用屬性的一部分:

> Task :properties

------------------------------------------------------------
Root project
------------------------------------------------------------

buildDir: /Users/.../basic-demo/build
buildFile: /Users/.../basic-demo/build.gradle.kts
description: null
group:
name: basic-demo
projectDir: /Users/.../basic-demo
version: unspecified

BUILD SUCCESSFUL

項目的 name 默認和所在文件夾的名稱是一致的酝惧。你也可以給 groupversion 屬性指定值榴鼎,但現在它們和
description 一樣是使用的默認值。

buildFile 屬性是構建腳本的全名限定路徑晚唇,默認位于 projectDir 下巫财。

一些屬性是可以被修改的。例如在構建腳本文件中嘗試加入如下代碼行哩陕,然后重新執(zhí)行 gradle properties平项。

description = "A trivial Gradle build"
version = "1.0"

接下來的步驟

恭喜赫舒!你已經學會如何創(chuàng)建一個新的Gradle構建并檢驗它!
你肯定希望創(chuàng)建針對特定平臺的庫或應用闽瓢,所以這里給出一些教程号阿,它們會知道你如何在選定的平臺上進行構建:

同時你也可以簽出一些GitHub上的Gradle構建示例

幫忙改進本教程

尋求反饋或具有疑問鸳粉?發(fā)現拼寫錯誤?和所有的Gradle教程一樣园担,幫助就是一個GitHub的issue届谈。請在gradle-guides/creating-new-gradle-builds添加issue或拉取請求,我們會給您幫助弯汰。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末艰山,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子咏闪,更是在濱河造成了極大的恐慌曙搬,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸽嫂,死亡現場離奇詭異纵装,居然都是意外死亡,警方通過查閱死者的電腦和手機据某,發(fā)現死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門橡娄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人癣籽,你說我怎么就攤上這事挽唉。” “怎么了筷狼?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵瓶籽,是天一觀的道長。 經常有香客問我埂材,道長塑顺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任楞遏,我火速辦了婚禮茬暇,結果婚禮上,老公的妹妹穿的比我還像新娘寡喝。我一直安慰自己糙俗,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布预鬓。 她就那樣靜靜地躺著巧骚,像睡著了一般赊颠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上劈彪,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天竣蹦,我揣著相機與錄音,去河邊找鬼沧奴。 笑死痘括,一個胖子當著我的面吹牛,可吹牛的內容都是我干的滔吠。 我是一名探鬼主播纲菌,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疮绷!你這毒婦竟也來了翰舌?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤冬骚,失蹤者是張志新(化名)和其女友劉穎椅贱,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體只冻,經...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡庇麦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了属愤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片女器。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖住诸,靈堂內的尸體忽然破棺而出驾胆,到底是詐尸還是另有隱情,我是刑警寧澤贱呐,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布丧诺,位于F島的核電站,受9級特大地震影響奄薇,放射性物質發(fā)生泄漏驳阎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一馁蒂、第九天 我趴在偏房一處隱蔽的房頂上張望呵晚。 院中可真熱鬧,春花似錦沫屡、人聲如沸饵隙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽金矛。三九已至芯急,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驶俊,已是汗流浹背娶耍。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留饼酿,地道東北人榕酒。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像故俐,于是被迫代替她去往敵國和親奈应。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理购披,服務發(fā)現,斷路器肩榕,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評論 6 342
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,504評論 25 707
  • 舉個栗子:內存溢出的bug是我們經常會碰到的棘手問題刚陡,這個問題發(fā)生之后,不同級別的程序員反應如何呢株汉? 初級程序員的...
    FlynnHai閱讀 200評論 0 0
  • 在天津的同學說自己的同事“十一”想到青島看看乔妈,讓給推薦一些景點蝙云。 這些年,在這座城市的大街小巷路召、山川海洋穿梭往返勃刨,...
    不辣的媽閱讀 664評論 6 7