Gradle(二)Gradle的優勢、項目結構介紹

目錄

    • 一、什么是 Gradle?
    • 二、為什么選擇 Gradle?
    • 三、Gradle 的項目結構
      • 3.1 項目結構
      • 3.2 gradle wrapper 包裝器
      • 3.3 settings.gradle 設置文件
      • 3.4 build.gradle 核心構建文件
        • 1)原始文件內容
        • 2)plugins 插件
        • 3)repositories:倉庫源
        • 4)dependencies 依賴

大家都知道 Gradle 和 Maven 一樣,是一個項目的構建工具。它通過任務來控制開發的進程,這些任務包括:編譯打包、測試、部署發布 等。Gradle 誕生于 2008 年,僅僅比 Maven 晚 4 年。Android 也采用 Gradle 作為默認的構建工具。

本文希望通過以下的講述,幫助你快速輕松的使用 Gradle 加速您的 Spring Boot 開發應用。

一、什么是 Gradle?

Gradle 是一款基于 Apache Ant 和 Maven 概念的現代化構建工具,它結合了前兩者的優點,同時引入了基于 Groovy(現也支持 Kitlin)的領域特定語言(DSL),使得構建腳本更加簡潔靈活。


二、為什么選擇 Gradle?

2012年開始,Spring 框架已全部使用 Gradle 來構建;2020年開始,Spring Boot 也全部采用 Gradle 來構建。官方使用 Gradle 的主要原因還是 “構建項目花費更少的時間”。(可參考:Spring/Spring Boot編譯工具從Maven遷移到了Gradle)

但對于我們普通的應用開發來說,Gradle 對于我們的優勢在于:更簡潔的代碼和更豐富的功能。(可參考:Gradle大戰Maven,勝負已分?)

在這里插入圖片描述

最近的一些統計報告,越來越顯示出 Gradle 有越來越多的人在使用它。

  • stackoverflow 的趨勢報告:
  • OpenLogic 發布的《2022年度開源報告》

Spring 官方生成應用程序的網站:spring initializer(https://start.spring.io/),也已將默認的構建工具從 Maven 切換到了 Gradle。

在這里插入圖片描述

綜合上述種種,小編覺得有必要了解一下快速易用的 Gradle 了。


三、Gradle 的項目結構

3.1 項目結構

打開 https://start.spring.io/,生成演示項目,項目的結構如下所示:

在這里插入圖片描述

  • springboot-grade:Spring Boot 項目的根目錄,基于 Gradle 構建。
  • grade/wrapper/:Gradle 包裝器,是 Gradle 提供的一個輕量級腳本工具,用于在不預先安裝 Gradle 的情況下運行 Gradle 構建任務。
    • grade-wrapper.jar:Gradle Wrapper 的可執行 JAR 文件。
    • grade-wrapper.properties:配置 Wrapper 使用的 Gradle 版本等信息。
  • src/:項目源代碼目錄(未展開具體內容)。
  • .gitignore - Git 忽略規則文件。
  • build.gradle - 項目構建腳本。
  • gradlew / gradlew.bat - Gradle Wrapper 啟動腳本(Unix/Windows)。
  • settings.gradle - 定義項目模塊和名稱。

3.2 gradle wrapper 包裝器

Gradle Wrapper 是 Gradle 包裝器,是 Gradle 提供的一個輕量級腳本工具,用于 在不預先安裝 Gradle 的情況下運行 Gradle 構建任務。它允許開發者同一項目的構建環境,避免因本地 Gradle 版本不同導致的構建問題。

可以直接通過 gradle wrapper 腳本對程序進行編譯、打包、測試、部署和發布等任務操作。

  • gradlew:是針對 List/MacOS 的 gradle wrapper;
  • gradlew.bat:是針對 Windows 的 gradle wrapper。

補充:如何加速 gradle wrapper 的下載速度?

gradle wrapper 會自動下載 gradle,若默認的下載 gradle 的 url 網速很慢,可以替換成阿里云或騰訊云的地址。當然可以是你公司內部的文件下載地址。

我們在 gradle/wrapper/gradle-wrapper.propertiesdistributionUrl 類配置:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=http\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

若使用阿里云的地址加速(列表頁面:https://mirrors.aliyun.com/macports/distfiles/gradle/),配置如下:

distributionUrl=https\://mirrors.aliyun.com/macports/distfiles/gradle/gradle-7.5.1-bin.zip

若使用騰訊云的地址加速(列表頁面:https://mirrors.cloud.tencent.com/gradle/),配置如下:

distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.5.1-bin.zip

3.3 settings.gradle 設置文件

本文件配置構建項目所需要的信息,Spring Boot 項目的該文件內容很簡單:

rootProject.name = 'gradle-demo'

此項是為了配置編譯之后文件的名字。

3.4 build.gradle 核心構建文件

1)原始文件內容

生成的 build.gradle 的文件內容如下:

plugins {id 'org.springframework.boot' version '2.7.5'id 'io.spring.dependency-management' version '1.0.15.RELEASE'id 'java'
}group = 'top.wisely'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'configurations {compileOnly {extendsFrom annotationProcessor}
}repositories {maven { url 'https://maven.aliyun.com/repository/public/' }maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }mavenCentral()
}dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'testImplementation 'org.springframework.boot:spring-boot-starter-test'
}tasks.named('test') {useJUnitPlatform()
}
2)plugins 插件
  • plugins {...}:插件部分,聲明了 plugins 的依賴。核心插件只需要使用 id 簡稱即可,社區插件需要使用全名稱的 id。
    • id 'org.springframework.boot' version '2.7.5':社區插件,Spring Boot Gradle 插件,它為我們提供 Spring Boot 運行、創建可執行 jar 包或者 war 包的能力。
    • id 'io.spring.dependency-management' version '1.0.15.RELEASE':社區插件,Spring Boot 依賴管理插件,它為我們提供對項目直接或間接依賴的庫的版本控制,這些都是 Spring Boot 做過兼容性測試的版本。
    • id 'java':核心插件:Java 插件將 Java 編譯以及測試等功能添加到項目中。
3)repositories:倉庫源
  • repositories {...}:倉庫源,配置了下載依賴包的地址。
    • mavenCentral():Gradle 默認使用 Maven 的中心庫下載依賴包。
    • maven { url 'https://maven.aliyun.com/repository/public/' }:也可以通過阿里云的 Maven 鏡像庫來加速。
    • maven { url 'https://mirrors.cloud.tencent.com/nexus/repository/maven-public/' }:或者通過騰訊云的 Maven 鏡像庫來加速。
4)dependencies 依賴
  • dependencies {...}:依賴信息。

    • implementation:普通依賴。

      我們只需要按照下面的格式即可引入依賴:

      implementation group: '***', name: '***', version: '***'
      

      或簡寫成:

      implementation 'group:name:version'
      

      因為使用了 Spring Boot 依賴管理插件,只要被 Spring Boot 所管理的依賴,版本無須維護,可以更加精簡地寫成:

      implementation 'group:name'
      

      所以 Spring Boot 所管理的依賴樣子一般為:

      dependencies {implementation 'org.springframework.boot:spring-boot-starter-web'// ...
      }
      

在我們絕大部分時間,我們和 Gradle 做依賴相關的工作,在了解這些后都能解決了。

我們可以通過 https://mvnrepository.com/ 網站查找添加依賴,我們在依賴中選中 Gralde 來復制內容到我們的依賴中:

在這里插入圖片描述

注意,一般情況下,我們會把復制來的版本號給去掉,以防 Spring Boot 已經對它做了版本管理,這樣我們就能直接下載兼容性良好的依賴包;如果去掉版本號后不能下載依賴包,意味著 Spring Boot 沒有做該包的版本管理,這是我們按照自己的需要添加合適的版本號。

  • testImplementation:測試依賴
    • testImplementation 'org.springframework.boot:spring-boot-starter-test':測試相關的依賴,使用 testImplementation,規則和普通依賴一致。
  • compileOnly:編譯依賴
    • compileOnly 'org.projectlombok:lombok':只在編譯期生效的依賴。
  • runtimeOnly:運行時依賴
    • runtimeOnly 'com.mysql:mysql-connector-j':旨在運行時起效的依賴。

由上述比較,我們發現Gradle有明顯于Maven的優勢。我提出下面的建議:

1、新項目嘗試使用Gradle來構建!

2、嘗試遷移Maven的老項目將其使用Gradle構建。(如:Spring/Spring Boot編譯工具從Maven遷移到了Gradle「官網翻譯」)

不愿遷移的理由很多:

1、對于Maven很熟悉了,不用遷移到新的工具!

2、又要學習一個新東西,卷不動了!

我覺得無論作為什么樣的職業,對新的東西要保持敏銳的感知和學習,不要停留在自己舒適的區域,無論Gradle有沒有那么優秀,或者有沒有那么多問題,我們要堅持嘗試一下。

最后送給大家一句話:

“I can’t understand why people are frightened of new ideas. I’m frightened of the old ones.” — John Cage
“我不明白為什么人們害怕新想法。 我害怕那些舊的。” - 約翰凱奇。

勇敢邁出舒適區,去冒險吧!

整理完畢,完結撒花~ 🌻





參考地址:

1.使用Gradle全面加速Spring Boot開發,https://zhuanlan.zhihu.com/p/578972804

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93008.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93008.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93008.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習-決策樹(上)

決策樹構建: 決策樹的結構與python中的二叉樹結構(PY數據結構-樹)相似,不過決策樹中除了葉節點之外的其他節點,都被稱之為“決策節點”,構建決策樹的過程,也就是選取每一個節點采用哪一個特征作為劃分依據的過程。 以…

一周學會Matplotlib3 Python 數據可視化-繪制直方圖(Histogram)

鋒哥原創的Matplotlib3 Python數據可視化視頻教程: 2026版 Matplotlib3 Python 數據可視化 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili 課程介紹 本課程講解利用python進行數據可視化 科研繪圖-Matplotlib,學習Matplotlib圖形參數基本設置&…

uni-app之刪除沒用的文件,搭建頁面

文章目錄一、初始化項目1.1 初始化index.vue1.2 刪除無用文件1.3 初始化后的目錄結果如下二、文件目錄分析2.1 核心文件2.2 關鍵文件夾?2.3 其他文件2.4 注意事項??三、創建頁面(pages)3.1 創建home頁面3.2 創建其他頁面3.3 查看pages.json3.4 刪除index頁面和pages.json的配…

99、【OS】【Nuttx】【構建】cmake 配置實操:問題解決

【聲明】本博客所有內容均為個人業余時間創作,所述技術案例均來自公開開源項目(如Github,Apache基金會),不涉及任何企業機密或未公開技術,如有侵權請聯系刪除 背景 接之前 blog 【OS】【Nuttx】【構建】cm…

2007-2023年各省環境保護支出統計數據

數據介紹 環境保護支出是指政府和企業為改善生態環境質量、防治污染、保護自然資源所投入的資金,涵蓋污染防治、生態修復、環境管理等多方面。污染防治支出、生態保護支出、環境管理事務、資源節約與循環利用等,當前環保支出仍面臨區域不平衡、隱性債務…

PyCharm(2025.1.3.1)綁定 Conda 環境

1. Pycharm 右下角,選擇( 如圖所示 )2. Path to conda 這里選擇如圖所示的這個文件( 在你下載的 Anaconda 文件里 ),之后在 Enviroment 中就可以看到你新創建的環境了

Liunx文件系統詳解

目錄 1.磁盤 1.1 概念 1.2 磁盤物理結構 1.3 磁盤的存儲結構 1.4 磁盤的邏輯結構 1.5 CHS && LBA地址 2.基礎文件系統 2.1 塊 ?編輯 2.2 分區 2.3 inode 3.ext2 ?件系統 3.1 宏觀認識 3.2 Block Group 3.3塊組內部構成 3.3.1 超級塊(Supe…

Mac如何安裝telnet命令

Mac如何安裝telnet命令_mac telnet-CSDN博客

【SpringBoot】持久層 sql 注入問題

目錄 概述 #{} 與 ${} 概述 前端惡意傳參,改變后端 sql 語句的語法結構,從而使后端給前端返回一些私密的數據。這種安全問題往往是因為沒有嚴格過濾參數,或者后端代碼不嚴謹導致的。 #{} 與 ${} 在 MyBatis 框架中,#{} 與 ${} 都…

怎么寫好漢語言文學專業的論文?

磨刀不誤砍柴功, 前期多看文章和文獻,吸取寫作經驗,寫作過程會更加順利噢!看到最后,相信你能得到收獲! 寫漢語言專業論文并不難,從選題、資料準備、框架搭建、正文寫作、修改定稿五個核心環節展…

MySQL User表入門教程

一、User表概述 MySQL的user表位于mysql系統數據庫中,是MySQL權限系統的核心,用于存儲用戶賬戶信息、認證方式和全局權限。通過操作此表,可實現用戶創建、權限分配及安全審計。 二、User表核心字段解析字段名作用示例值Host用戶允許連接的主機…

[NPUCTF2020]這是什么覓

題目是一個文件,我們先以記事本打開一下,開頭就是PK,基本可以確定這是一個 ZIP 格式的壓縮包?,不確定可以用winhex打開:?50 4B 03 04開頭則 100% 是 ZIP 文件。改一下后綴之后解壓得到一張圖片上面是日期&#xff0c…

每日任務day0812:小小勇者成長記之擠牛奶

清晨,薄霧還繚繞在草地上,小小勇者背著編織籃子來到農場。奶牛們低頭咀嚼,尾巴輕輕拍打著蒼白的露珠。老人微笑著遞給他一只溫熱的牛奶罐,說:“第一次要慢,別驚擾它們。”勇者學著老人彎下身,溫…

IIS 多用戶環境中判斷服務器是否為開發用電腦,數據狀態比較

如果只需要在 IIS 多用戶環境中判斷服務器是否為開發用電腦(一個固定狀態,通常不會動態切換),代碼可以進一步簡化。這種場景下,狀態一般是啟動時確定的(如通過配置文件或環境變量),后…

P2865 [USACO06NOV] Roadblocks G

思路:嚴格次短路,在任何情況下如果發現一條從1到i的路,都有以下情況:1.該路徑小于當前1到i的最短路,將最短路替換2.該路徑長度等于當前最短路,舍去3.該路徑大于最短路且小于次短路,將此路徑替換…

基于Hadoop的汽車價格預測分析及評論情感分析可視化系統

文章目錄有需要本項目的代碼或文檔以及全部資源,或者部署調試可以私信博主一、項目背景二、項目目標三、系統架構四、功能模塊五、創新點六、應用價值與前景每文一語有需要本項目的代碼或文檔以及全部資源,或者部署調試可以私信博主 一、項目背景 近年…

gpt-5與gpt-5-fast

簡單來說: GPT-5 → 追求最高質量的推理,輸出會更細致、更準確,尤其適合需要深度思考、長鏈推理、嚴謹分析的任務(比如復雜代碼調試、長文檔推理、系統設計)。速度相對慢一些。GPT-5-fast → 追求更高的響應速度&#…

Mybatis源碼解讀-SqlSession 會話源碼和Executor SQL操作執行器源碼

相關流程圖整理元數據簡略圖執行流程圖一級緩存、二級緩存設計與查詢流程分析圖一級緩存設計-類圖一級緩存工作流程圖二級緩存設計-類圖二級緩存工作流程圖元數據簡略圖 執行流程圖 一級緩存、二級緩存設計與查詢流程分析圖 一級緩存設計-類圖 一級緩存工作流程圖 二級緩存設計…

使用Excel制作甘特圖

最終效果:專業的項目管理團隊通常會使用project制作甘特圖,但是很多人沒接觸過這個軟件,另外project制作的甘特圖并不適合放在PPT中展示。由于Excel圖表的數據標簽無法準確識別月初和月末,如果使用原始數據直接做的效果是這樣的&a…

超詳細基于stm32hal庫的esp8266WiFi模塊驅動程序(可直接移植)

目錄 前言: 1 前期準備 1.1 了解mqtt通信協議 1.1.1核心組件 1.2 ESP8266固件燒錄 1.3 啟動EMQX服務器 1.3.1大概了解emqx的使用 2 驅動代碼講解應用 2.1 硬件接線 2.2 AT指令 2.3 驅動代碼 2.4 效果展示 前言: esp8266支持mqtt通信協議&…