什麼是Gradle

  • 參考自官方文檔8.1.1,創建時間:2023年06月03日
  • Gradle的出現背景
    • 軟件構建一般包含編譯,測試,打包等過程。如果文件比較少,我們可以手動使用java,、javac、 jar命令去做這些事情。但當工程越來越大,就需要使用工具幫助我們實現自動化構建。
      • Ant是第一代Java構建工具,maven是第二代Java構建構建,Gradle是第三代Java構建工具。
      • Ant是Java的第一代構建工具,其構建和c和c++的makefile比較像。定義一個任務,規定它的依賴,然後就可以通過ant來執行這個任務。但是Ant沒有管理依賴的方式,需要手動拷貝依賴包。
      • maven最核心的改進就是定義瞭倉庫的概念,幫助我們管理依賴包。在pom文件中定義依賴的坐標,maven就會自動幫我們需要的包從倉庫中打包進來。maven在約定大於配置方面越走越遠,拋棄瞭ant中通過target定義任務的做法,而是引入瞭生命周期的概念。maven不鼓勵你自己定義任務,它要求用戶在maven的生命周期中使用插件的方式去工作。
      • Gradle則是結合瞭Ant的任務和maven的倉庫管理等優點,並用腳本構建的方式取代的maven的xml文件,這樣更加靈活,同時也導致瞭學習成本更高。
      • Gradle更新很快,很多api也會變化,兼容性不好,導致網絡上很多舊的文章可能不適用瞭,這是其一缺陷。為瞭解決這個問題,Gradle的解決方案是綁定項目的Gradle版本,所有項目下面都會有一個Gradle版本配置,導入項目時會下載對應的Gradle版本,然後用其構建。
    • Gradle作為Google大力擁護的構建工具,被廣泛地運用到瞭Android開發中,在Java Web方面也大有取代Maven上位的趨勢。 Gradle是一款開源的自動化構建工具,使用靈活且性能極佳,可以使用 Groovy 或者 Kotlin DSL 來編寫構建腳本。
      • Gradle 可以使用Groovy和Kotlin作為腳本語言。Groovy是單純的腳本語言,功能弱,並且隻在Gradle構建中用到。而Kotlin是谷歌推出的用於安卓開發的編程語言,功能強大,因此推薦使用Kotlin。
      • Gradle 宣佈將 Kotlin DSL 選為新 Gradle 構建的默認設置! 從現在開始,它將成為插件和文檔中的默認選項。 得益於豐富的功能,例如一流的函數和擴展方法,Kotlin 可以維護甚至改進創建 Gradle 腳本的最佳元素。
  • Gradle特點
  • Gradle和maven對比
    • maven
      • 經典好用,約定大於配置的方式,使其上手簡單,但靈活性稍差。
      • 使用xml配置方式管理依賴,看起來稍醜。
      • 在大型項目上,每次編譯都要重新執行所有步驟會導致耗時很長。
    • Gradle
      • 更加現代的構建工具,但學習成本更高。
      • 使用腳本方式構建,語法簡潔,更加靈活。
      • 編譯速度快,適用於大型項目。
      • Gradle不僅僅可以構建Java語言,還可以構建其他語言。
    • 可以使用Gradle將maven項目轉為gradle項目,因此小型項目可以先使用maven,後面項目大瞭再轉Gradle。比如spring開始是使用maven構建,現在全面使用Gradle構建spring項目,從原來的半小時到現在的幾分鐘就構建完成。如果說我們的項目構建幾分鐘內可以構建完成,使用maven會更加合適。
  • Gradle的幾個術語概念:項目、任務、插件
    • 項目
      • 項目就是我們的項目,每個項目根目錄下都有一個構建腳本。如果是多模塊情況下,父項目的構建腳本一般用於定義包含瞭哪些子項目,一般是setting.gradle或者setting.gradle.kts
    • 任務
      • 任務就是我們要執行的動作,如編譯、測試、打包項目都是屬於一個任務,Gradle提供瞭一些常用的任務,我們也可以自己定義一些任務。
    • 插件- 可以定義插件,包含一些通用的配置和任務等等。然後在其他地方引用插件,就可以使用插件裡面的配置、任務等等。Gradle提供瞭一些默認的插件:javaJava-libraryapplicationJava-plateform。Java-library提供瞭一些打包成library庫的任務,application提供瞭一些打包成包含main方法可以直接執行的應用。Java-plateform用於構建多模塊項目。
赞(0)