日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gradle中的build script详解

發(fā)布時間:2024/2/28 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gradle中的build script详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 簡介
  • project和task
  • 一個例子
  • task詳細(xì)講解
    • task腳本
    • task依賴
    • 動態(tài)task
    • 默認(rèn)task
    • build script的外部依賴

簡介

build.gradle是gradle中非常重要的一個文件,因為它描述了gradle中可以運行的任務(wù),今天本文將會帶大家體驗一下如何創(chuàng)建一個build.gradle文件和如何編寫其中的內(nèi)容。

project和task

gradle是一個構(gòu)建工具,所謂構(gòu)建工具就是通過既定的各種規(guī)則,將原代碼或者原文件通過一定的task處理過后,打包生成目標(biāo)文件的步驟。

所以我們在gradle中有兩個非常重要的概念,分別是項目和任務(wù)。

每一個gradle的構(gòu)建任務(wù)可以包含一個或者多個項目,項目可以有多種類型,比如是一個web項目或者一個java lib項目等。為了實現(xiàn)project要完成的目標(biāo),需要定義一個個的task來輔助完成目標(biāo)。

task主要用來執(zhí)行特定的任務(wù),比如編譯class文件,打包成jar,生成javadoc等等。

一個例子

接下來我們使用一個具體的例子來講解一下,gradle到底是怎么用的。

首先我們創(chuàng)建一個新的project目錄:

$ mkdir gradle-test $ cd gradle-test

gradle提供了一個init方法,來方便的創(chuàng)建gradle項目的骨架,我們用下看:

gradle init Starting a Gradle Daemon (subsequent builds will be faster)Select type of project to generate:1: basic2: application3: library4: Gradle plugin Enter selection (default: basic) [1..4] 2Select implementation language:1: C++2: Groovy3: Java4: Kotlin5: Scala6: Swift Enter selection (default: Java) [1..6] 3Split functionality across multiple subprojects?:1: no - only one application project2: yes - application and library projects Enter selection (default: no - only one application project) [1..2] 1Select build script DSL:1: Groovy2: Kotlin Enter selection (default: Groovy) [1..2] 1Select test framework:1: JUnit 42: TestNG3: Spock4: JUnit Jupiter Enter selection (default: JUnit 4) [1..4] 1Project name (default: gradle-test): Source package (default: gradle.test):> Task :init Get more help with your project: https://docs.gradle.org/6.7/samples/sample_building_java_applications.htmlBUILD SUCCESSFUL in 45s 2 actionable tasks: 2 executed

按照你的需要,經(jīng)過一系列的選擇之后,就可以生成一個基本的gradle項目了。

我們看下生成的文件和目錄:

. ├── app │ ├── build.gradle │ └── src │ ├── main │ │ ├── java │ │ │ └── gradle │ │ │ └── test │ │ │ └── App.java │ │ └── resources │ └── test │ ├── java │ │ └── gradle │ │ └── test │ │ └── AppTest.java │ └── resources ├── gradle │ └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle14 directories, 8 files

其中g(shù)radle-wrapper是幫你自動設(shè)置和安裝gradle的工具,同時它還提供了gradlew和gradlew.bat這兩個執(zhí)行文件,用來執(zhí)行g(shù)radle的任務(wù)。

我們主要看其中的兩個配置文件,settings.gradle和build.gradle。

settings.gradle中配置的是gradle中要build的項目信息:

rootProject.name = 'gradle-test' include('app')

上面的例子中,rootProject.name指定了項目的名字,include(‘a(chǎn)pp’)表示需要引入一個叫做app的子項目,這個子項目中包含著實際的要打包的內(nèi)容。

再看一下app中的build.gradle文件:

plugins {// Apply the application plugin to add support for building a CLI application in Java.id 'application' }repositories {// Use JCenter for resolving dependencies.jcenter() }dependencies {// Use JUnit test framework.testImplementation 'junit:junit:4.13'// This dependency is used by the application.implementation 'com.google.guava:guava:29.0-jre' }application {// Define the main class for the application.mainClass = 'gradle.test.App' }

很簡單,指定了插件,倉庫地址,依賴包和應(yīng)用程序的main class路徑。

一切準(zhǔn)備好之后,我們就可以進行構(gòu)建和運行了。

有兩種方式來運行,一種方式就是使用系統(tǒng)自帶的gradle命令,一種方式就是使用剛剛gradle為你生成的gradlew。

gradle run> Configure project :app Repository ${repo.url} replaced by $REPOSITORY_URL .> Task :app:run Hello World! gradle build> Configure project :app Repository ${repo.url} replaced by $REPOSITORY_URL .BUILD SUCCESSFUL in 2s 7 actionable tasks: 6 executed, 1 up-to-date

你還可以帶上 --scan 參數(shù)將build上傳到gradle scan中,得到更加詳細(xì)的構(gòu)建分析:

./gradlew build --scanBUILD SUCCESSFUL in 0s 7 actionable tasks: 7 executedPublishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service. Do you accept these terms? [yes, no] yesGradle Terms of Service accepted.Publishing build scan... https://gradle.com/s/5u4w3gxeurtd2

task詳細(xì)講解

上面的例子中,我們使用的都是gradle默認(rèn)的tasks,并沒有看到自定義task的使用,接下來我們將會探討一下,如何在build.gradle編寫自己的task。

這里我們使用的groovy來編寫build.gradle,所以我們可以像運行代碼一樣來運行它。

task腳本

先創(chuàng)建一個非常簡單的task:

task hello {doLast {println 'Hello www.flydean.com!'} }

上面定義了一個名叫hello的task,并且會在執(zhí)行最后輸出 “Hello www.flydean.com!”。

我們這樣運行:

gradle -q hello Hello www.flydean.com!

-q的意思是悄悄的執(zhí)行,將會忽略gradle自身的log信息。我們把要執(zhí)行的task名字寫在gradle后面就可以了。

如果你熟悉ant命令的話,可以看到gradle的task和ant很類似,不過更加的強大。

因為是groovy腳本,所以我們可以在其中執(zhí)行代碼:

task upper {doLast {String someString = 'www.flydean.com'println "Original: $someString"println "Upper case: ${someString.toUpperCase()}"} }

運行結(jié)果:

> gradle -q upper Original: www.flydean.com Upper case: WWW.FLYDEAN.COM

或者執(zhí)行times操作:

task count {doLast {4.times { print "$it " }} } > gradle -q count 0 1 2 3

task依賴

gradle中的一個task可以依賴其他的task:

task hello {doLast {println 'Hello www.flydean.com!'} } task intro {dependsOn hellodoLast {println "I'm flydean"} }

上面兩個task的順序是無關(guān)的,可以依賴的寫在前面,被依賴的寫在后面,或者反過來都成立。

動態(tài)task

除了靜態(tài)的task之外,我們還可以通過代碼來動態(tài)創(chuàng)建task:

4.times { counter ->task "task$counter" {doLast {println "I'm task number $counter"}} } > gradle -q task1 I'm task number 1

我們還可以將task看做成為一個對象,調(diào)用gradle的api進行操作:

4.times { counter ->task "task$counter" {doLast {println "I'm task number $counter"}} } task0.dependsOn task2, task3

上面的例子中,我們調(diào)用API手動創(chuàng)建了task之間的依賴關(guān)系:

> gradle -q task0 I'm task number 2 I'm task number 3 I'm task number 0

還可以task之間的屬性調(diào)用:

task myTask {ext.myProperty = "www.flydean.com" }task printTaskProperties {doLast {println myTask.myProperty} }

默認(rèn)task

如果不想每次都在調(diào)用gradle命令的時候手動指定某個具體的task名字,我們可以使用defaultTasks:

defaultTasks 'clean', 'run'task clean {doLast {println 'Default Cleaning!'} }task run {doLast {println 'Default Running!'} }task other {doLast {println "I'm not a default task!"} }

上面的代碼執(zhí)行g(shù)radle和gradle clean run是相當(dāng)?shù)摹?/p>

build script的外部依賴

既然build script可以用groovy代碼來編寫,那么如果我們想要在build script中使用外部的jar包怎么辦呢?

這個時候,我們可以將外部依賴放到buildscript()方法中,后面的task就可以使用引入的依賴了:

import org.apache.commons.codec.binary.Base64buildscript {repositories {mavenCentral()}dependencies {classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'} }task encode {doLast {def byte[] encodedString = new Base64().encode('hello world\n'.getBytes())println new String(encodedString)} }

上面的例子中,encode使用了一個外部的依賴包Base64,這個依賴包是在buildscript方法中引入的。

本文已收錄于 http://www.flydean.com/gradle-build-script/

最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發(fā)現(xiàn)!

歡迎關(guān)注我的公眾號:「程序那些事」,懂技術(shù),更懂你!

總結(jié)

以上是生活随笔為你收集整理的gradle中的build script详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。