【问题标题】:What is gradle wrapper and the gradlew.bat file?什么是 gradle wrapper 和 gradlew.bat 文件?
【发布时间】:2017-12-05 05:32:48
【问题描述】:

最近我开始了解 Gradle 作为构建系统的强大功能,作为一名 Android 开发人员,我想深入了解它。

One article 说如下:

您可以使用the Gradle wrapper 命令行工具执行Android 项目可用的所有构建任务。它可以作为 Windows 的批处理文件 (gradlew.bat) 和 Linux 和 Mac 的 shell 脚本 (gradlew.sh) 使用,并且可以从您使用 Android Studio 创建的每个项目的根目录访问。

要使用包装器运行任务,请使用以下命令之一:

  • 在 Windows 上:
    gradlew task-name
    

现在我有一些疑问如下:

  1. 什么是 Gradle Wrapper 和 gradlew.bat
  2. 如果我安装了 Android Studio 并且它正在使用 gradle 构建我的应用程序(所以我的系统上已经安装了 gradle),我是否还需要从命令行安装 gradle 以用于构建目的?当我在命令行上写任何诸如gradlegradlew 之类的命令时,我收到错误消息gradlew is not recognized as internal or external command(其他命令也出现同样的错误)。我可能在错误的路径上使用它,请帮助我在什么路径上使用 Gradle 相关命令?
  3. 如果我需要下载并安装它,我如何以及在哪里可以找到该文件?还有其他流程?

我为此使用 Windows 机器。

【问题讨论】:

标签: android android-studio gradle android-gradle-plugin


【解决方案1】:
  1. gradlew.bat 是 Gradle Wrapper(在这种情况下适用于 Windows)。 Gradle Wrapper 只是一个小型实用程序,可确保安装 Gradle(或在必要时安装),以便您始终可以构建项目。 Gradle 本身允许您管理项目的依赖项和构建配置。

  2. 如果您已经安装了 Android Studio,那么您已经安装了 Gradle,一切顺利。 (从技术上讲,每个项目都有自己的包装器来处理安装/使用 Gradle)

  3. 正如我上面提到的,你很好。

最后,Gradle 是一个用于构建项目的命令行工具,您可以直接使用它(尽管您不必这样做),因为它正是 Android Studio 用于构建项目的工具。

【讨论】:

  • 每当我编写 gradlew 或 gradle 或任何 gradle 相关命令时,都会出错。查看编辑后的帖子。
  • gradlew 位于项目的根目录中,因此您需要在该文件夹中才能运行它。
  • 这个答案是完全错误的。 gradlew.bat 不是包装器,它是包装器的四个文件之一。包装器不关心常规安装的 Gradle 版本,但始终只使用包装器管理的 Gradle 版本。
  • 好的,是的,我想你可以说包装器是 4 个文件,其中 2 个是相同的(仅适用于不同的操作系统)和前 2 个使用的两个。我选择了事实上,bat(或 sh)文件是您使用包装器的方式,我不确定做出这种区分是否会对 Abhishek 有所帮助。不过,我不确定这是否意味着我“完全错了”。
  • 好吧,这不是您回答中的唯一错误,并且通过告诉人们启动脚本 包装器,他们可能倾向于只签入那些单独无用的文件.几天前我终于看到了这样一个项目。 ;-)
【解决方案2】:

在 cmets 之后编辑

Gradle 是一个构建系统。

这个 gradle-wrapper 是构建 Android 项目的主要接口。它是 Gradle-build-system 的一部分,主要检查 gradle 是否已安装。

gradlew.bat - 它是在 Windows 上使用的 batch file。您甚至可以用记事本打开它以查看其中的说明。批处理文件就像写在要执行的文件中的“命令”。您使用它(在 Windows 的情况下)执行构建命令。它还检查是否安装了 gradle。如果不是,它会下载并安装它。

示例:在 Windows 上构建 android 应用:

  • 打开命令提示符
  • 导航到项目的根目录
  • 执行gradlew.bat assembleDebug

它启动包装器,检查是否安装了 Gradle 并 执行所有“gradle specific”命令来构建你的项目。

您需要安装 Gradle 吗?

实际上,没有。这个 gradlew 脚本的工作就是检查它。如果 gradle 还没有,它会自动下载它并将其用于所有以后的构建。

【讨论】:

  • 每当我编写 gradlew 或 gradle 或任何 gradle 相关命令时,都会出错。查看编辑后的帖子。
  • 我在哪里可以得到这个包装?
  • 你在用什么?窗户?还是 linxu/mac ?
  • 我用的是windows
  • 这个答案是完全错误的。 Gradle 包装器是 Gradle 构建系统的一部分,也不是 Android 特定的。它也不会使构建变得更容易,除非您不需要安装 Gradle,然后您的构建会使用构建所设计的确切 Gradle 版本运行。您编写的“说明”与不使用包装器相同。 gradlew.bat 不是包装器的接口,而是包装器的一部分。而且包装器也不关心传统安装的 Gradle 版本,它只是忽略它们。
【解决方案3】:

Gradle Wrapper 是 Gradle 构建系统的可选部分。它由您检入版本控制系统的四个文件组成。 Unix 启动脚本<your root project>/gradlew<your root project>/gradlew.bat Windows 启动脚本、<your root project>/gradle/wrapper/gradle-wrapper.jar 包含包装器的类文件并由启动脚本启动,<your root project>/gradle/wrapper/gradle-wrapper.properties 包含包装器的一些配置,例如 Gradle用于构建项目的版本。

在我看来,每个 Gradle 项目,即使是最小的项目,都应该使用 Gradle 包装器。

Gradle 包装器确保您的构建始终使用相同的 Gradle 版本运行,无论谁执行构建以及 Gradle 安装与否,只要该人使用 Gradle 包装器来构建项目。这意味着您可以针对该 Gradle 版本设计您的构建,并确保构建不会因为有人使用不同版本的 Gradle 而失败,因此这也是构建可重复性的重要一步。

此外,希望构建您的项目的人只需要安装 Java 即可。他不需要安装任何 Gradle 版本。实际上任何已经安装的 Gradle 版本都会被忽略。 Gradle 包装器检查在~/.gradle/ 中是否已经存在构建所需的版本,因为任何项目的一些 Gradle 包装器已经将它放在那里。如果已经存在,则使用它,否则会自动下载。

如果您在命令行中键入 gradlew 并且找不到该命令,这意味着您没有将根项目路径放入 PATH 环境变量(我也不建议这样做),您目前不是在您的根项目目录中。要运行 Gradle 构建,您必须在项目中的任何位置并调用 Gradle 或 Gradle 包装器。但就像任何不在路径上的可执行文件一样,您当然必须提供其路径。所以如果你在你的项目根目录中,你可以简单地做gradlew。如果您在<root project dir>/foo/bar/,则需要致电../../gradlew

Gradle Wrapper 文件由隐式可用的 Gradle 任务 wrapper 生成,然后被检入相关项目的 VCS。如果项目不存在这四个文件,则它不使用 Gradle 包装器,您应该向项目发布改进请求以添加它。

如果某些项目不使用 Gradle 包装器,而是使用 Gradle 构建,您可以安装 Gradle 并使用 gradle 而不是 gradlew,或者您甚至可以调用任何其他可用项目的 Gradle 包装器在磁盘上。然后,构建将使用包装器或 Gradle 安装正在使用的 Gradle 版本运行,因此可能无法按预期运行,这就是为什么如果使用 Gradle,每个项目都应该使用包装器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 2010-09-15
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多