溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么使用java構(gòu)建工具gradle

發(fā)布時(shí)間:2021-11-01 11:42:33 來源:億速云 閱讀:108 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“怎么使用java構(gòu)建工具gradle”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么使用java構(gòu)建工具gradle”吧!

      現(xiàn)在我們都在談?lì)I(lǐng)域驅(qū)動(dòng)設(shè)計(jì),Gradle本身的領(lǐng)域?qū)ο笾饕蠵roject和Task。Project為Task提供了執(zhí)行上下文,所有的Plugin要么向Project中添加用于配置的Property,要么向Project中添加不同的Task。一個(gè)Task表示一個(gè)邏輯上較為獨(dú)立的執(zhí)行過程,比如編譯Java源代碼,拷貝文件,打包Jar文件,甚至可以是執(zhí)行一個(gè)系統(tǒng)命令或者調(diào)用Ant。另外,一個(gè)Task可以讀取和設(shè)置Project的Property以完成特定的操作。

      讓我們來看一個(gè)最簡單的Task,創(chuàng)建一個(gè)build.gradle文件,內(nèi)容如下:

    task helloWorld << {
       println "Hello World!"
    }

      這里的“<<”表示向helloWorld中加入執(zhí)行代碼——其實(shí)就是groovy代碼。Gradle向我們提供了一整套DSL,所以在很多時(shí)候我們寫的代碼似乎已經(jīng)脫離了groovy,但是在底層依然是執(zhí)行的groovy。比如上面的task關(guān)鍵字,其實(shí)就是一個(gè)groovy中的方法,而大括號(hào)之間的內(nèi)容則表示傳遞給task()方法的一個(gè)閉包。除了“<<”之外,我們還很多種方式可以定義一個(gè)Task,我們將在本系列后續(xù)的文章中講到。

      在與build.gradle相同的目錄下執(zhí)行:

    gradle helloWorld

      命令行輸出如下:

    :helloWorld
    Hello World!
    
    BUILD SUCCESSFUL
    
    Total time: 2.544 secs

      在默認(rèn)情況下,Gradle將當(dāng)前目錄下的build.gradle文件作為項(xiàng)目的構(gòu)建文件。在上面的例子中,我們創(chuàng)建了一個(gè)名為helloWorld的Task,在執(zhí)行g(shù)radle命令時(shí),我們指定執(zhí)行這個(gè)helloWorld Task。這里的helloWorld是一個(gè)DefaultTask類型的對(duì)象,這也是定義一個(gè)Task時(shí)的默認(rèn)類型,當(dāng)然我們也可以顯式地聲明Task的類型,甚至可以自定義一個(gè)Task類型(我們將在本系列的后續(xù)文章中講到)。

      比如,我們可以定義一個(gè)用于文件拷貝的Task:

    task copyFile(type: Copy) {
       from 'xml'
       into 'destination'
    }

      以上copyFile將xml文件夾中的所有內(nèi)容拷貝到destination文件夾中。這里的兩個(gè)文件夾都是相對(duì)于當(dāng)前Project而言的,即build.gradle文件所在的目錄。

      Task之間可以存在依賴關(guān)系,比如taskA依賴于taskB,那么在執(zhí)行taskA時(shí),Gradle會(huì)先執(zhí)行taskB,然后再執(zhí)行taskA。聲明Task依賴關(guān)系的一種方式是在定義一個(gè)Task的時(shí)候:

    task taskA(dependsOn: taskB) {
       //do something
    }

      Gradle在默認(rèn)情況下為我們提供了幾個(gè)常用的Task,比如查看Project的Properties、顯示當(dāng)前Project中定義的所有Task等??梢酝ㄟ^一下命令查看Project中所有的Task:

    gradle tasks

      輸出如下:

    :tasks

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

    Build Setup tasks
    -----------------
    setupBuild - Initializes a new Gradle build. [incubating]
    wrapper - Generates Gradle wrapper files. [incubating]

    Help tasks
    ----------
    dependencies - Displays all dependencies declared in root project 'gradle-blog'.
    dependencyInsight - Displays the insight into a specific dependency in root project 'gradle-blog'.
    help - Displays a help message
    projects - Displays the sub-projects of root project 'gradle-blog'.
    properties - Displays the properties of root project 'gradle-blog'.
    tasks - Displays the tasks runnable from root project 'gradle-blog'.

    Other tasks
    -----------
    copyFile
    helloWorld

    To see all tasks and more detail, run with --all.

    BUILD SUCCESSFUL

    Total time: 2.845 secs

      可以看到,除了我們自己定義的copyFile和helloWorld之外,Gradle還默認(rèn)為我們提供了dependencies、projects和properties等Task。dependencies用于顯示Project的依賴信息,projects用于顯示所有Project,包括根Project和子Project,而properties則用于顯示一個(gè)Project所包含的所有Property。

      在默認(rèn)情況下,Gradle已經(jīng)為Project添加了很多Property,我們可以調(diào)用以下命令進(jìn)行查看:

    gradle properties

      輸出如下:

    :properties

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

    allprojects: [root project 'gradle-blog']
    ant: org.gradle.api.internal.project.DefaultAntBuilder@1342097

    buildDir: /home/davenkin/Desktop/gradle-blog/build
    buildFile: /home/davenkin/Desktop/gradle-blog/build.gradle
    ...
    configurations: []
    convention: org.gradle.api.internal.plugins.DefaultConvention@11492ed
    copyFile: task ':copyFile'
    ...
    ext: org.gradle.api.internal.plugins.DefaultExtraPropertiesExtension@1b5d53a
    extensions: org.gradle.api.internal.plugins.DefaultConvention@11492ed
    ...
    helloWorld: task ':helloWorld'
    ...
    plugins: [org.gradle.api.plugins.HelpTasksPlugin@7359f7]
    project: root project 'gradle-blog'
    ...
    properties: {...}
    repositories: []

    tasks: [task ':copyFile', task ':helloWorld']
    version: unspecified

    BUILD SUCCESSFUL

    Total time: 2.667 secs

      在以上Property中,allprojects表示所有的Project,這里只包含一個(gè)根Project,在多項(xiàng)目構(gòu)建中,它將包含多個(gè)Project;buildDir表示構(gòu)建結(jié)果的輸出目錄;我們自己定義的helloWorld和copyFile也成為了Project中的Property。另外,Project還包括用于執(zhí)行Ant命令的DefaultAntBuilder(Property名為ant)和Project的描述屬性description。

    到此,相信大家對(duì)“怎么使用java構(gòu)建工具gradle”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI