via: https://tianyu94.com/2019/06/...
Make the impossible possible, make the possible easy, and make the easy elegant
Gradle is Groovy
Minimize Coupling, Maximize Cohesion
Task 任務(wù)task helloWorld { doLast { println "Hello world~" } }
$ gradle -q helloWorld Hello world~
-q quiet 只輸出 task 的相關(guān)信息
每個(gè)新建的 task 默認(rèn)都是 DefaultTask 類,標(biāo)準(zhǔn)的 Task 實(shí)現(xiàn)。
結(jié)合函數(shù)方法task startTask { doLast { hello() } } def hello() { println "Hello~" }
$ gradle startTask Hello~動(dòng)態(tài) task
3.times { task "repeatTask$it" { println "I am repeat task" } } // 指定此 task 需依賴 repeatTask0 task groupTherapy(dependsOn: repeatTask0)
$ gradle groupTherapy :repeatTask0 I am repeat task :repeatTask1 I am repeat task :repeatTask2 I am repeat task
$ gradle groupTherapy -x repeatTask1 :repeatTask0 I am repeat task :repeatTask2 I am repeat task
-x 排除指定 task
$ gradle repeatTask0 groupTherapy :repeatTask0 I am repeat task :repeatTask1 I am repeat task :repeatTask2 I am repeat task
執(zhí)行多個(gè) task,且每個(gè) task 僅執(zhí)行一次給現(xiàn)有的 task 添加動(dòng)作
task printVersion { doFirst { println "Version 0.1 in doFirst" } doLast { println "Version 0.1 in doLast" } } printVersion.doFirst { println "First action" } printVersion.doLast { println "Last action" }
$ gradle printVersion First action Version 0.1 in doFirst Version 0.1 in doLast Last action設(shè)置描述和分組
task myTask { group = "group1" description = "I am myTask of group1" } // or task myTask(group: "group1", description: "I am myTask of group1") { // ... }依賴多個(gè) task
task myTask(dependsOn: [otherTask1, otherTask2]) { // ... }
注意,若執(zhí)行 myTask,它依賴的 otherTask1 和 otherTask2 (除其本身有依賴關(guān)系外)并不會(huì)保證執(zhí)行的先后順序與代碼順序一致。這個(gè)特征可使多個(gè) task 并行執(zhí)行提高效率,或是忽略固定的順序來(lái)保證代碼的維護(hù)性和避免潛在的破壞終結(jié)器 task (finalizer task)
task task1 { doLast { println "task1" } } task task2 { doLast { println "task2" } } task1.finalizedBy task2
$ gradle task1 task1 task2
若終結(jié)器 task 執(zhí)行失敗,則不會(huì)影響 Gradle 的 task 的執(zhí)行進(jìn)度部分命令行選項(xiàng)
-? / -h / --help 打印幫助信息
-b / --build-file 指定構(gòu)建文件 e.g. gradle -b my.gradle
--offline 使用緩存離線構(gòu)建
-q / --quiet, -w / --warning, -i / --info, -d / --debug 日志等級(jí)
s / --stacktrace 打印簡(jiǎn)要堆棧跟蹤
S / --full-stacktrace 打印所有堆棧跟蹤
幫助 tasktasks 顯示項(xiàng)目可運(yùn)行的 task,-a / --all 顯示全部 task
properties 顯示項(xiàng)目中可用屬性
插件 使用 Java 插件apply plugin: "java"使用 War 插件
apply plugin: "war" // 部分自定義屬性設(shè)置 webAppDirName = "mywebfiles" // 指定Web應(yīng)用的源代碼路徑 war { // 將 mydir1,mydir2 路徑添加到 war 文件的根目錄下 from "mydir1" from "mydir2" }使用 Jetty 插件
// 在 Gradle 4.0 之前可用 apply plugin: "jetty" // 在 Gradle 4.0 之后 jetty 插件已移除,替換為 Gretty // 其他引用方法見(jiàn)官網(wǎng):https://gretty-gradle-plugin.github.io/gretty-doc/Getting-started.html apply from: "https://raw.github.com/akhikhl/gretty/master/pluginScripts/gretty.plugin" // Gretty 屬性設(shè)置 // 詳情見(jiàn)官網(wǎng):https://gretty-gradle-plugin.github.io/gretty-doc/Gretty-configuration.html gretty { httpPort = 8081 // 指定服務(wù)端口 contextPath = "/MyWebApp" // 指定 url 根路徑 // ... many more properties }Gretty tasks
appRun / jettyRun 運(yùn)行程序
屬性version = 0.1 // 設(shè)置項(xiàng)目版本 sourceCompatibility = 1.8 // 設(shè)置Java編譯兼容版本為 1.8 jar { manifest { // 添加屬性到 Jar 文件中 attributes "Main-Class": "path.to.your.MainClass" } } sourceSets { main { java { // 自定義源代碼路徑,默認(rèn)是 /src/main/java/ srcDirs = ["your_src_dir_path"] } } test { java { // 自定義測(cè)試代碼路徑,默認(rèn)是 /src/test/java srcDirs = ["your_test_dir_path"] } } }拓展屬性
project.ext.myProp = "hello" // or ext.myProp = "hello" // or myProp = "hello"
或者在 gradle.properties 文件中定義拓展屬性
依賴repositories { mavenCentral() // 使用 Maven Central 2 倉(cāng)庫(kù) } // 以下依賴存在多個(gè)重復(fù),僅做示例 dependencies { // 編譯使用 compile group: "org.apache.commons", name: "commons-lang3", version: "3.9" // 簡(jiǎn)寫(xiě)形式,用冒號(hào)隔開(kāi) compile "org.apache.commons:commons-lang3:3.9" // 同 compile ,在 Gradle 5.x 后(建議)用此替換 compile implementation "org.apache.commons:commons-lang3:3.9" // 編譯時(shí)需要,在運(yùn)行時(shí)由環(huán)境提供 providedCompile "javax.servlet:servlet-api:2.5" // 運(yùn)行時(shí)提供 runtime "javax.servlet:jstl:1.1.2" }包裝器 生成包裝器
$ gradle wrapper # 在構(gòu)建腳本 build.gradle 旁會(huì)生成 gradle/wrapper/... 的包裝器文件 *.jar 和 *.properties # 同時(shí)生成 gradlew(for linux),gradlew.bat(for windows)使用包裝器
Windows: gradlew.bat ...
Linux: gradlew ...
定制包裝器task wrapper(type: Wrapper) { // 指定 Gradle 版本 gradleVersion = "5.1.1" // 獲取 Gradle 包的 url distributionUrl = "http://mycustomserver.com/gradle/dists" // 包裝器被解壓后存放的相對(duì)路徑 distributionPath = "gradle-dists" }
筆記部分內(nèi)容來(lái)源:Gradle in Action https://www.manning.com/books...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75018.html
摘要:可以在沒(méi)有安裝的情況下使用,這時(shí)候就需要了。創(chuàng)建文件使用來(lái)創(chuàng)建一組文件。官方建議我們?cè)谒许?xiàng)目中都創(chuàng)建文件,方便沒(méi)有安裝的用戶使用。代碼如下然后使用來(lái)查看變更之后的版本。不過(guò)只需要下載一次,之后再次使用相同的版本就不會(huì)下載了。 Gradle可以在沒(méi)有安裝Gradle的情況下使用,這時(shí)候就需要Gradle Wrapper了。Gradle Wrapper其實(shí)就是一個(gè)腳本文件,它會(huì)在沒(méi)有安裝...
摘要:最近想深入的學(xué)習(xí)一下工程化方面相關(guān)的東西,在和直接糾結(jié)不已,因?yàn)榈臄U(kuò)展性太差勁了,學(xué)習(xí)成本頗高,所以最后投入了的懷抱中,以后有時(shí)間再重新學(xué)習(xí)一下吧最近的學(xué)習(xí)筆記是基于系列,其中各種教程和例子大都是來(lái)源于官方文檔或者網(wǎng)絡(luò)上的博客。 最近想深入的學(xué)習(xí)一下工程化方面相關(guān)的東西,在maven和gradle直接糾結(jié)不已,因?yàn)閙aven的擴(kuò)展性太差勁了,學(xué)習(xí)成本頗高,所以最后投入了gradle的懷...
摘要:記得在中支持多個(gè)子項(xiàng)目的構(gòu)建方法同樣的在中也會(huì)支持多項(xiàng)目的構(gòu)建方法還記得在中如何配置多項(xiàng)目工程嗎這里回憶一下首先我們需要一個(gè)父元素文件比如這樣而在中我們并不需要指定父元素的標(biāo)簽我們只需要編寫(xiě)好對(duì)應(yīng)的文件夾名稱,并且將文件夾名稱和對(duì) 記得在maven中支持多個(gè)子項(xiàng)目的構(gòu)建方法,同樣的在gradle 中也會(huì)支持多項(xiàng)目的構(gòu)建方法 還記得在maven中如何配置多項(xiàng)目工程嗎, 這里回憶一下 首先...
摘要:是一個(gè)基于和概念的項(xiàng)目自動(dòng)化構(gòu)建工具。當(dāng)前其支持的語(yǔ)言限于和主要面向應(yīng)用。本次分享將具體講述如何利用來(lái)創(chuàng)建一個(gè)簡(jiǎn)單的項(xiàng)目。首先我們新建一個(gè)文件夾作為展示的項(xiàng)目。中的代碼如下這是用來(lái)定義項(xiàng)目。接著創(chuàng)建文件夾,這是項(xiàng)目開(kāi)發(fā)中習(xí)慣性的構(gòu)建方法。 ??Gradle是一個(gè)基于Apache Ant和Apache Maven概念的項(xiàng)目自動(dòng)化構(gòu)建工具。它使用一種基于Groovy的特定領(lǐng)域語(yǔ)言(DSL)...
摘要:項(xiàng)目結(jié)構(gòu)下面是我們創(chuàng)建項(xiàng)目生成的目錄展開(kāi)目錄如下配置文件,由系統(tǒng)自動(dòng)生成,一般情況下不需要進(jìn)行修改開(kāi)發(fā)工具的信息默認(rèn)啟動(dòng)模塊主模塊,開(kāi)發(fā)者用于編寫(xiě)源碼文件以及開(kāi)發(fā)資源文件的目錄用于存放模塊的依賴文件用于存放源碼用于存放應(yīng)用所用到的資源文件 1.項(xiàng)目結(jié)構(gòu) 下面是我們創(chuàng)建項(xiàng)目生成的目錄 1.M...
閱讀 2737·2021-11-22 13:52
閱讀 1204·2021-10-14 09:43
閱讀 3659·2019-08-30 15:56
閱讀 2964·2019-08-30 13:22
閱讀 3291·2019-08-30 13:10
閱讀 1575·2019-08-26 13:45
閱讀 1111·2019-08-26 11:47
閱讀 2807·2019-08-23 18:13