Gradle中buildscript块的目的

时间:2013-07-21 15:17:16

标签: classpath gradle

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

  

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

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath group: 'commons-codec', name: 'commons-codec', version: '1.2'
  }
}

好的,但有什么区别:

repositories {
  mavenCentral()
}
dependencies {
  compile group: 'commons-codec', name: 'commons-codec', version: '1.2'
}

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

6 个答案:

答案 0 :(得分:147)

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

答案 1 :(得分:112)

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

答案 2 :(得分:61)

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

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

答案 3 :(得分:6)

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

答案 4 :(得分:2)

它有点高,但希望有所帮助。

对我来说,一旦我开始理解什么是a building block,方法和任务,明显的区别就开始形成。语法如何,如何配置它们等等。所以我建议你仔细阅读所有这些。之后,您可以开始理解这种语法。

然后知道对象build.gradle(Project类的一个实例)的类型是非常重要的,这样才能知道build.gradle文件中有什么内容。这将回答“构建脚本”的位置。和其他人来自。并扩展您的功能/功能(让我们说安卓),看看plugins如何提供帮助。

最后但并非最不重要的是,这里有一个非常好的tutorial,它讨论了闭包,代理是理解脚本必不可少的概念。

答案 5 :(得分:1)

通过演示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
    }
}

模块级gradle文件

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

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

那么,buildscript有什么作用?它定义了在哪里找到插件。插件有什么作用?它包含多个任务。任务做什么?它为我们提供了构建,安装,皮棉等功能。

我的理解可能是错误的。如果您发现任何误导之处,请立即纠正我。