第九天:使用 Gradle Wrapper

在开发 JVM 专案时,有时会遇到这些实务问题:

  1. 专案使用的 Gradle 版本跟自己本机安装的不同
  2. 参与专案开发的每位成员使用的 Gradle 版本都不同
  3. 团队维护多个专案,每个专案使用的 Gradle 版本不同

这对团队开发来说增加了复杂度,有可能因不同版本的 Gradle 而增加建置失败的风险。

Gradle Wrapper 来解救

为了避免这种 Gradle 大乱斗的问题,Gradle 官方推出了一种名为 Gradle Wrapper 的方案,其作法就是在专案里放一个可携的脚本,这个脚本可以指定专案使用的 Gradle 版本,并在使用前自动下载并载入执行环境里。使用 Gradle Wrapper 带来几个好处:

  1. 开发者可以不用在本机安装 Gradle,节省设定专案的时间
  2. 标准化专案的 Gradle 版本,确保专案在建置的时候可以使用版本一致的 Gradle,让专案在建置时更可靠与坚固
  3. 当要升级版本或是切换执行环境时,只需要修改 Wrapper 设定就能轻松达成

这种使用 Gradle Wrapper 的方式,已变成官方建议的标准作法。

在现有专案增加 Gradle Wrapper

虽然大多数的专案在建立时都已经预设采用 Gradle Wrapper,但假如是维护旧专案,需要导入 Gradle Wrapper 时,可以透过指令让专案支援 Wrapper:

$ gradle wrapper

当专案安装好 Gradle Wrapper 後,目录结构会看起来像这样:

├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── build.gradle.kts
├── settings.gradle.kts
├── gradlew
└── gradlew.bat

  • 根目录底下的 gradlewgradlew.bat 是分别给 Unix-like 及 Windows 作业系统用的执行脚本
  • gradle/wrapper/gradle-wrapper.jar 是下载 Gradle 执行档的核心程序
  • gradle/wrapper/gradle-wrapper.properties 则是用来纪录 Wrapper 的设定档,比方说 Version、Distribution Type(allbin)等

使用 Gradle Wrapper

当我们使用 Gradle Wrapper 时,就不再是使用之前提到的 gradle 指令,而是依照作业系统改用 ./gradlewgradlew.bat 指令。Gradle Wrapper 会依照 gradle/wrapper/gradle-wrapper.properties 的设定值,到 Gradle 官网下载对应版本的 Gradle 执行档下来,以类似 Portable 的方式来执行各种指令。Gradle Wrapper 的运作流程可以参考官网的这张说明:

升级 Gradle Wrapper

假如手上专案使用的 Gradle Wrapper 版本过旧想要升级,Gradle 也有对应的升级指令:

$ ./gradlew wrapper --gradle-version 7.2

有了 Wrapper 後,我还需要在本机装 Gradle 吗?

看到这边您可能会很疑惑,既然 Gradle 官方都推荐使用 Gradle Wrapper 了,那我们还需要在本机安装 Gradle 吗?(而且还学了 5 种方式耶!)

答案是:看情况。

假如您只需要维护已经装好 Gradle Wrapper 的专案的话,那的确是不需要在本机安装 Gradle。反之,假如你会需要在本机用 Gradle 建立一个全新的专案的话,那就还是得安装 Gradle 喔!

当然,还是有几个例外。假如您是使用 IntelliJ IDEA 或 Android Studio 来建立专案的话,这些 IDE 都已经内建 Gradle,所以本机就可以不用安装 Gradle。另外也提醒一下,即便 Gradle Wrapper 可以很聪明方便的下载与运行 Gradle,但开发机上该有的 JDK 执行环境还是要有喔!

参考资料


<<:  Day14 突如其来的Minecraft

>>:  # Day 5 Supporting PMUs on RISC-V platforms (一)

Day 12:Commitizen

话说今天本来是打算要接着昨天的进度纪录架设 grafana 的 dashboard,可是昨天半夜 d...

【第十一天 - Two-pointer 题目分析】

先简单回顾一下,今天预计分析两个题目: Remove Duplicates from Sorted ...

资安学习路上-Linux基础与Web基础1

决定好学习方向後(台科大资安研究社社课为主),发现他的课程有连续性,直接一口气买了110年上下两个学...

LeetCode解题 Day23

1328. Break a Palindrome https://leetcode.com/prob...