毫無疑問,現在Gradle已經成為java世界最火的構建工具,風頭已經蓋過了冗余的ant,落后的maven。Gradle是以Groovy語言編寫的一套構建腳本的DSL,由于Groovy語法的優雅,所以導致Gradle天生就有簡潔、可讀性強、靈活等特性。
Gradle的命令行功能也非常強大。本人從maven轉到Gradle,深深被gradle強大的命令行功能折服。通過命令行來實現Gradle的各種特性,就像魔法師在表演魔法一樣。
more- 日志輸出。 Gradle中的日志有6個層級。從高到低分別是 ERROR(錯誤信息)、QUIET(重要信息)、WARNGING(警告信息)、LIFECYCLE(進程信息)、INFO(一般信息)、DEBUG(調試信息)。在執行gradle task時可以適時的調整信息輸出等級,以便更方便的觀看執行結果。
-q
(或--quiet
)是啟用重要信息級別,該級別下只會輸出自己在命令行下打印的信息及錯誤信息。
-i
(或--info
)則會輸出除debug以外的所有信息。
-d
(或--debug
)會輸出所有日志信息。
比如一個build.gradle有這樣一個task。
task hello << { println 'hello world!' }
加入-q
與不加-q
的輸出結果不同。
$ gradle hello :hello hello world! BUILD SUCCESSFUL Total time: 3.546 secs $ gradle -q hello hello world!
堆棧跟蹤。如果執行gradle task失敗時,如果想得到更詳細的錯誤信息,那么就可以使用
-s
(或--stacktrace
)來輸出詳細的錯誤堆棧。你還可以使用-S
(或--full-stacktrace
)來輸出全部堆棧信息,不過一般不推薦這樣做,因為gradle是基于groovy語言,而groovy作為一門動態語言可能會輸出與你的錯誤代碼毫不相關的信息。跳過指定的測試。如果你在執行build的時候想跳過test task,那么可以使用
-x
命令。
$ gradle build -x test :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :jar UP-TO-DATE :assemble UP-TO-DATE :check :build BUILD SUCCESSFUL Total time: 3.529 secs
繼續執行task而忽略前面失敗的task。默認情況下,如果有某個task失敗,后續的task就不會繼續執行。但是有時候我們想運行所有的task來一次性得到所有的構建錯誤,那么我們可以使用
--continue
命令。使用--continue
命令后即使遇到某些task失敗也不會停止后續task的執行。但是需要注意的是如果某個task失敗了,那么依賴于這個task的其他task依舊不會執行,因為這會帶來不安全的因素。調用task時使用短名或縮寫。如果一個task的名稱過長,那么調用時可以只輸入部分名稱即可調用,無需輸入全名。
task helloWorld << { println 'hello world!' }
比如調用helloWorld可以通過全名調用、前綴調用或首字母調用。
$ gradle -q helloWorld hello world! $ gradle -q hell hello world! $ gradle -q hW hello world!
- 使用指定的gradle文件調用task。默認情況下,如果你調用gradle task,那么首先會尋找當前目錄下的build.gradle文件,以及根據settings.gradle中的配置尋找子項目的build.gradle。但是有時候我們想指定使用某個gradle文件,那么可以使用
-b
命令。 比如當前目錄有個子目錄subproject1,里面有個叫hello.gradle。
task helloWorld << { println 'hello world!' }
那么在當前目錄可以使用以下命令調用這個task。
$ gradle -b subproject1/hello.gradle helloWorld :helloWorld hello world! BUILD SUCCESSFUL Total time: 3.752 secs
- 使用指定的項目目錄調用task。前面已經說過,執行gradle的task默認會在當前目錄尋找build.gradle及settings.gradle文件。如果我們想在任何地方執行某個項目的task,那么可以使用
-p
來指定使用的項目。
gradle -q -p learnGradle helloWorld
這條命令是調用learnGradle這個項目下的helloWorld task。
- 顯示task之間的依賴關系。眾所周知,使用
gradle tasks
可以列出當前所有可被使用的task,但是并沒有顯示task之間的依賴關系。我們可以加上--all
來顯示 task的依賴關系。
$ gradle tasks --all ……………… Other tasks ----------- task0 task1 task2 task3 …………
從上面可以看出task0依賴task1、task2及task3。
- 查看指定階段的依賴關系。使用
gradle dependencies
可以查看項目中包的依賴關系。不過是列出了所有階段的依賴,如果項目中依賴復雜的話看起來有點頭痛。那么可以使用--configuration
來查看指定階段的依賴情況。
$ gradle -q dependencies ------------------------------------------------------------ Root project ------------------------------------------------------------ archives - Configuration for archive artifacts. No dependencies compile - Compile classpath for source set 'main'. No dependencies default - Configuration for default artifacts. No dependencies runtime - Runtime classpath for source set 'main'. No dependencies testCompile - Compile classpath for source set 'test'. \--- junit:junit:4.11 \--- org.hamcrest:hamcrest-core:1.3 testRuntime - Runtime classpath for source set 'test'. \--- junit:junit:4.11 \--- org.hamcrest:hamcrest-core:1.3
使用gradle -q dependencies --configuration testCompile
可以只查看testComiple的依賴。
$ gradle -q dependencies --configuration testCompile ------------------------------------------------------------ Root project ------------------------------------------------------------ testCompile - Compile classpath for source set 'test'. \--- junit:junit:4.11 \--- org.hamcrest:hamcrest-core:1.3
- 查看指定dependency的依賴情況。 假如我想查看項目中有沒有引入junit,那些階段引入了junit,那么可以使用
dependecyInsight
來查看。
$ gradle dependencyInsight --dependency junit --configuration testCompile :dependencyInsight junit:junit:4.11 \--- testCompile
注意dependencyInsight
默認只會查看compile階段的依賴,如果要查看其他階段可以使用--configuration
來指定。
- 使用
--profile
命令行可以產生build運行時間的報告。該報告存儲在build/report/profile目錄,名稱為build運行的時間。
$ gradle build --profile :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :jar UP-TO-DATE :assemble UP-TO-DATE :compileTestJava UP-TO-DATE :processTestResources UP-TO-DATE :testClasses UP-TO-DATE :test UP-TO-DATE :check UP-TO-DATE :build UP-TO-DATE BUILD SUCCESSFUL Total time: 3.726 secs
然后在build/report/profile目錄下可以看到build的report。
這個報表非常有用,尤其是在在縮短build時間時可以快速定位那些耗時長的task。
- 試運行build。如果你想知道某個task執行時那些task會被一起執行,但是你又不想真正的執行這些task,可以使用
-m
來試運行。
$ gradle -m build :compileJava SKIPPED :processResources SKIPPED :classes SKIPPED :jar SKIPPED :assemble SKIPPED :compileTestJava SKIPPED :processTestResources SKIPPED :testClasses SKIPPED :test SKIPPED :check SKIPPED :build SKIPPED BUILD SUCCESSFUL Total time: 3.53 secs
這樣我們可以一目了然的看到那些task被執行了,又不需要花太多的時間。
- Gradle的圖形界面。
其實Gradle自帶一個圖形界面來讓習慣gui操作的人來操作Gradle。打開方式很簡單。
$ gradle --gui
這樣就會彈出一個gui界面。
通過這個gui界面可以很方面的執行gradle的各種命令,還可以將常用的命令保存為favorites。該gui的配置信息默認被存儲在當前項目的gradle-app.setting文件中。
注意使用gradle --gui
會阻塞當前終端,可以使用gradle --gui&
來實現后臺運行。
- 重新編譯Gradle腳本。第一次運行Gradle命令,會在項目更目錄下生成一個.gradle目錄來存放編譯后的腳本。只有當構建腳本發生修改時采用重新編譯。我們可以使用
--recompile-scripts
來強行重新編譯。