Gradle中buildscript块的目的

Xel*_*ian 219 classpath gradle

我是Gradle的新手,我正在阅读文档,但我不了解它的某些部分.其中一个部分与buildscript块连接.它的目的是什么?

如果构建脚本需要使用外部库,则可以将它们添加到构建脚本本身的脚本类路径中.您可以使用buildscript()方法执行此操作,并传入一个声明构建脚本类路径的闭包.

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
  }
}
Run Code Online (Sandbox Code Playgroud)

好的但是有什么区别:

repositories {
  mavenCentral()
}
dependencies {
  compile group: 'commons-codec', name: 'commons-codec', version: '1.2'
}
Run Code Online (Sandbox Code Playgroud)

例如,为什么有必要使用buildscript

Pet*_*ser 163

buildScript块确定哪些插件,任务类和其他类可用于构建脚本其余部分.如果没有buildScript块,您可以使用Gradle开箱即用的所有内容.如果您还想使用第三方插件,任务类或其他类(在构建脚本中!),则必须在buildScript块中指定相应的依赖项.

  • 您必须使用`buildScript`块,因为Gradle需要此信息才能*了解构建脚本*的其余部分.这就是为什么你必须在一个单独的通道(`buildScript`块)中提供这些信息.从技术上讲,Gradle需要这些信息才能*编译和评估*构建脚本的其余部分.引擎盖下发生的事情是Gradle将构建脚本分成两个脚本(`buildScript`块和其他所有内容),以便它可以单独处理它们. (36认同)
  • 我听不懂Em。我用_group编写了一个任务类:`sample.infotask',名称:'infotask',版本:'1.0'`并使用_uploadArchives_任务将其上传到本地仓库_ .. / lib'_在另一个项目中,如果我使用我必须写的任务是:`buildscript {仓库{maven {url'file:../ lib'}}依赖项{类路径组:'sample.infotask',名称:'infotask',版本:'1.0'}}我是我吗对?为什么我们必须使用_buildScript_块?当我在本地上传工件时,我的机器上有jar。只需告诉Gradle从何处以及在我的类路径中放什么,就没有什么特别之处了? (2认同)
  • 如果您在阅读其他答案后阅读此答案,您可以理解彼得想说的话(并且非常正确)。但是第二行——“没有 buildScript 块,你可以使用 Gradle 附带的所有东西”——是什么使 ans 模棱两可。 (2认同)

小智 141

  • 全局级别dependenciesrepositories部分列出了构建源和运行源等所需的依赖项.
  • buildscriptbuild.gradle文件本身.因此,这将包含创建RPM的依赖关系Dockerfile,以及在所有依赖项中运行任务的任何其他依赖关系build.gradle

  • 谢谢 - 这是迄今为止最明确的答案,恕我直言. (19认同)
  • gradle本身的所有扩展都是通过buildscript-> dependencies找到的,而这些依赖关系是从buildscript-> repositories部分下载的.在开始执行构建任务(如源代码编译等)之前,先运行buildscript块(构建系统准备阶段). (4认同)
  • `buildscript`只是构建脚本的依赖项 (3认同)
  • buildscript是node.js中的devDependencies,顶层=依赖关系。 (2认同)

Dan*_*son 62

我很欣赏Peter的回答......但是对于我来说,在答案和文档中强调构建脚本的其余部分并不是很明显.

通常引入依赖功能是用于Java程序或您可能正在编写的任何其他程序.引入Spring说,不是在构建脚本中使用,而是在Java程序中使用.将它放在buildscript闭包中可确保依赖项可在gradle构建本身中使用.不是输出程序.


Kun*_*sai 13

通过演示 Android 顶级 gradle 文件进行更多解释。

buildscript {
    // this is where we are going to find the libraries defined in "dependencies block" at below
    repositories {
        google()
        jcenter()
        maven { url 'https://dl.bintray.com/kotlin/kotlin-eap' }
    }

    // everything listed in the dependencies is actually a plugin, which we'll do "apply plugin" in our module level gradle file.
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2' // this is android gradle plugin
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // kotlin gradle plugin
    }
}
Run Code Online (Sandbox Code Playgroud)

模块级gradle文件

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
Run Code Online (Sandbox Code Playgroud)

什么是“插件”?它们只是java类,实现了Plugin接口。在该接口下,它有一个方法“apply”来添加多个不同名称的任务对象。任务是一个我们可以实现工作流程的类。例如,构建任务包含构建应用程序的流程。

那么,buildscript 有什么作用呢?它定义了在哪里可以找到插件。插件有什么作用?它包含多项任务。任务有什么作用?它为我们提供了构建、安装、lint 等功能。

我的理解可能是错误的。如果您发现任何内容有误导性,请随时纠正我。


小智 8

"buildscript"配置部分用于gradle本身(即更改gradle如何执行构建).所以本节通常会包含Android Gradle插件.