国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 現代高效的java構建工具gradle的快速入門

現代高效的java構建工具gradle的快速入門

2022-03-08 00:43無知者云 Java教程

和Maven一樣,Gradle只是提供了構建項目的一個框架,真正起作用的是Plugin,本文主要介紹了gradle入門,文中通過示例代碼介紹的非常詳細,感興趣的小伙伴們可以參考一下

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

  現在我們都在談領域驅動設計,Gradle本身的領域對象主要有Project和Task。Project為Task提供了執行上下文,所有的Plugin要么向Project中添加用于配置的Property,要么向Project中添加不同的Task。一個Task表示一個邏輯上較為獨立的執行過程,比如編譯Java源代碼,拷貝文件,打包Jar文件,甚至可以是執行一個系統命令或者調用Ant。另外,一個Task可以讀取和設置Project的Property以完成特定的操作。

  讓我們來看一個最簡單的Task,創建一個build.gradle文件,內容如下:

?
1
2
3
task helloWorld << {
   println "Hello World!"
}

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

  在與build.gradle相同的目錄下執行:

?
1
gradle helloWorld

  命令行輸出如下:

?
1
2
3
4
5
6
:helloWorld
Hello World!
 
BUILD SUCCESSFUL
 
Total time: 2.544 secs

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

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

?
1
2
3
4
task copyFile(type: Copy) {
   from 'xml'
   into 'destination'
}

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

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

?
1
2
3
task taskA(dependsOn: taskB) {
   //do something
}

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

?
1
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還默認為我們提供了dependencies、projects和properties等Task。dependencies用于顯示Project的依賴信息,projects用于顯示所有Project,包括根Project和子Project,而properties則用于顯示一個Project所包含的所有Property。

  在默認情況下,Gradle已經為Project添加了很多Property,我們可以調用以下命令進行查看:

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

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

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

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

到此這篇關于現代高效的java構建工具gradle的快速入門的文章就介紹到這了,更多相關gradle 入門內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/davenkin/p/3417762.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕av一区 | 爱操在线| 久久精品国产99国产精品 | 日韩av中文字幕在线播放 | 国产欧美高清在线观看 | 免费久草 | 欧美日韩视频 | 久久成人免费视频 | 国产精品jizz在线观看麻豆 | 国产精品a级 | 亚洲欧美激情精品一区二区 | 久久精品国产99国产精品 | 91亚色 | 91原创国产 | 日本一区二区三区免费观看 | 91视频精品 | 国产精品久久久久久久久久久久久久 | 国产综合亚洲精品一区二 | 欧美淫视频| 亚洲 欧美 日韩 在线 | 久久福利电影 | 免费观看福利视频 | 亚洲一区二区在线播放 | 国产三级久久久久 | 免费一级在线观看 | 精品一区二区三区中文字幕老牛 | 日本不卡高字幕在线2019 | 国产日韩精品视频 | 99精品在线观看 | 国产婷婷色一区二区三区 | 欧美一区在线观看视频 | 国产精品久久久久久久久久三级 | 色视频www在线播放国产人成 | 毛片com | 欧美 日韩 中文 | 91精品电影 | 91免费国产在线 | 黄色电影免费在线观看 | 国产欧美一区二区视频 | 伊人在线 | 亚洲免费电影一区 |