ChatGPT解决这个技术问题 Extra ChatGPT

使用 gradlew 和 gradle 的区别

使用 gradlewgradle 有什么区别或者它们是否相同?


A
Abhijit

不同之处在于 ./gradlew 表示您正在使用 gradle 包装器。包装器通常是项目的一部分,它有助于安装 gradle。如果您在没有包装器的情况下使用 gradle,则必须手动安装它 - 例如,在 mac brew install gradle 上,然后使用 gradle 命令调用 gradle。在这两种情况下,您都使用 gradle,但前者更方便并确保不同机器之间的版本一致性。

每个 Wrapper 都与特定版本的 Gradle 相关联,因此当您第一次为给定的 Gradle 版本运行上述命令之一时,它将下载相应的 Gradle 发行版并使用它来执行构建。这不仅意味着您不必自己手动安装 Gradle,而且您还可以确保使用构建所针对的 Gradle 版本。这使您的历史构建更可靠

在此处阅读更多信息 - https://docs.gradle.org/current/userguide/gradle_wrapper.html

此外,Udacity 有一个简洁的高级视频解释 gradle 包装器的概念 - https://www.youtube.com/watch?v=1aA949H-shk


也许我读错了,但对我来说听起来像是一个危险信号。听起来 Gradle 不向后兼容,或者它发展得非常快(而且不稳定)。无法访问 Internet 的 CI 服务器会发生什么情况?
@TheImpaler 我猜你必须安装所有需要的 Gradle 版本,就像 Wrapper 一样,如果它可以访问 Internet。
所以一个单行的结论可能是:总是喜欢 ./gradlew build 而不是 gradle build 对吗?
@OrenIshShalom 正确,您甚至不必将构建部分指定为 clean 并且 build 是默认任务,当您执行 ./gradlew
y
yoAlex5

gradle 与 gradlew

gradlew 是使用 gradle 的包装器(w - 字符)。

在引擎盖下 gradlew 执行三个主要操作:

下载并安装正确的 gradle 版本

解析参数

调用 gradle 任务

使用 Gradle Wrapper,我们可以将项目分发/共享给每个人,以使用相同的版本和 Gradle 的功能(编译、构建、安装......),即使它尚未安装。

要创建包装器运行:

gradle wrapper

此命令生成:

gradle-wrapper.properties 将包含有关 Gradle 分发的信息

*./ 在 Unix 上用于指定当前目录