最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

現(xiàn)代高效的java構(gòu)建工具gradle的快速入門

 更新時間:2021年11月01日 10:54:35   作者:無知者云  
和Maven一樣,Gradle只是提供了構(gòu)建項目的一個框架,真正起作用的是Plugin,本文主要介紹了gradle入門,文中通過示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下

  和Maven一樣,Gradle只是提供了構(gòu)建項目的一個框架,真正起作用的是Plugin。Gradle在默認(rèn)情況下為我們提供了許多常用的Plugin,其中包括有構(gòu)建Java項目的Plugin,還有War,Ear等。與Maven不同的是,Gradle不提供內(nèi)建的項目生命周期管理,只是java Plugin向Project中添加了許多Task,這些Task依次執(zhí)行,為我們營造了一種如同Maven般項目構(gòu)建周期。更多有關(guān)Maven的知識,讀者可以訪問Maven官網(wǎng),或者可以參考筆者寫的Maven學(xué)習(xí)系列文章。 

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

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

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

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

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

gradle helloWorld

  命令行輸出如下:

:helloWorld
Hello World!

BUILD SUCCESSFUL

Total time: 2.544 secs

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

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

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

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

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

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

  Gradle在默認(rèn)情況下為我們提供了幾個常用的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則用于顯示一個Project所包含的所有Property。

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

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

  在下一篇文章中,我們將講到創(chuàng)建Task的多種方法。

請通過以下方式下載本系列文章的Github示例代碼:

git clone https://github.com/davenkin/gradle-learning.git

到此這篇關(guān)于現(xiàn)代高效的java構(gòu)建工具gradle的快速入門的文章就介紹到這了,更多相關(guān)gradle 入門內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java?8?Stream?處理數(shù)據(jù)方法匯總

    Java?8?Stream?處理數(shù)據(jù)方法匯總

    這篇文章主要介紹了Java?8?Stream處理數(shù)據(jù),Stream是Java?8?新引入的一個包它讓我們能用聲明式的方式處理數(shù)據(jù),Stream流式處理相較于傳統(tǒng)方法簡潔高效,也便于進行并發(fā)編程,更多相關(guān)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容
    2022-06-06
  • Java BigDecimal基礎(chǔ)用法詳解

    Java BigDecimal基礎(chǔ)用法詳解

    Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數(shù)進行精確的運算。雙精度浮點型變量double可以處理16位有效數(shù),但在實際應(yīng)用中,可能需要對更大或者更小的數(shù)進行運算和處理
    2022-06-06
  • 沒有外網(wǎng)IDEA離線使用maven倉庫的方法

    沒有外網(wǎng)IDEA離線使用maven倉庫的方法

    這篇文章主要介紹了沒有外網(wǎng),IDEA如何離線使用maven倉庫,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 如何使用Spring-Test對Spring框架進行單元測試

    如何使用Spring-Test對Spring框架進行單元測試

    這篇文章主要介紹了如何使用Spring-Test對Spring框架進行單元測試,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java后臺實現(xiàn)微信支付和微信退款

    Java后臺實現(xiàn)微信支付和微信退款

    這篇文章主要介紹了Java后臺實現(xiàn)微信支付和微信退款,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • java中對象的序列化與反序列化深入講解

    java中對象的序列化與反序列化深入講解

    這篇文章主要給大家介紹了關(guān)于java中對象的序列化與反序列化的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 分析Java設(shè)計模式之組合模式

    分析Java設(shè)計模式之組合模式

    組合模式是一種對象的行為模式。將對象組合成樹形結(jié)構(gòu)以表示“部分-整體”的層次結(jié)構(gòu)。組合模式使得用戶對單個對象和組合對象的使用具有一致性。它的本質(zhì)是統(tǒng)一葉子對象和組合對象。它的目的是讓客戶端不再區(qū)分操作的是組合對象還是葉子對象,而是以一個統(tǒng)一的方式來操作
    2021-06-06
  • JAVA讀取二進制文件以及畫圖教程

    JAVA讀取二進制文件以及畫圖教程

    由于項目需要,需要對二進制文件進行讀取,所以這篇文章主要給大家介紹了關(guān)于JAVA讀取二進制文件以及畫圖的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • spring+netty服務(wù)器搭建的方法

    spring+netty服務(wù)器搭建的方法

    本篇文章主要介紹了spring+netty服務(wù)器搭建的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 詳解Java中的增強 for 循環(huán) foreach

    詳解Java中的增強 for 循環(huán) foreach

    foreach 是 Java 中的一種語法糖,幾乎每一種語言都有一些這樣的語法糖來方便程序員進行開發(fā),編譯期間以特定的字節(jié)碼或特定的方式來對這些語法進行處理。能夠提高性能,并減少代碼出錯的幾率。
    2017-05-05

最新評論

平罗县| 平凉市| 石景山区| 基隆市| 元朗区| 潢川县| 星子县| 台东市| 阳朔县| 富裕县| 澄迈县| 沁阳市| 格尔木市| 电白县| 龙游县| 唐河县| 尉犁县| 盐山县| 五华县| 原阳县| 本溪市| 溧水县| 泗洪县| 沽源县| 农安县| 宁德市| 东港市| 靖边县| 旬邑县| 田东县| 浦城县| 宜黄县| 三门县| 贵州省| 德安县| 百色市| 保康县| 夏邑县| 泾阳县| 女性| 漳平市|