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

如果构建脚本需要使用外部库,可以将它们添加到构建脚本本身的脚本类路径中。您可以使用buildscript()方法,传入一个声明构建脚本类路径的闭包。 buildscript { 存储库{ mavenCentral () } 依赖关系{ 类路径组:'common -codec',名称:'common -codec',版本:'1.2' } }

好的,但是区别是什么呢:

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

例如,为什么需要使用buildscript?


当前回答

“buildscript”配置部分是针对gradle本身的(即更改gradle如何能够执行构建)。本节通常包括Android Gradle插件。

其他回答

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

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

那么,buildscript是做什么的呢?它定义了在哪里找到插件。插件是做什么的?它包含多个任务。task是做什么的?它为我们提供了构建、安装、lint等。

我的理解可能错了。如果你发现任何误导,请不要犹豫纠正我。

这有点高,但希望会有所帮助。

对我来说,一旦我开始理解什么是构建块、方法和任务,清晰的区别就开始形成了。语法如何,如何配置等等。我建议你们把这些都看一遍。在此之后,您可以开始理解这种语法。

那么,了解对象构建的类型是非常重要的。gradle (Project类的一个实例),以便了解在构建中可以有什么。gradle文件。这将回答'buildScript'和其他来自哪里。为了扩展你的功能/特性(比如android),看看插件是如何帮助你的。

最后但并非最不重要的是,这里有一个非常好的教程,讨论了闭包,委托,这是理解脚本所必需的概念。

“buildscript”配置部分是针对gradle本身的(即更改gradle如何能够执行构建)。本节通常包括Android Gradle插件。

buildscript块用于构建脚本,而不是用于gradle构建输出(例如,Android应用程序apk)。在下面的代码示例中,编码代码用于构建脚本,而不是在gradle构建输出程序中;因此依赖项应该添加到buildscript块中。

https://docs.gradle.org/current/userguide/tutorial_using_tasks.html#sec:build_script_external_dependencies

External dependencies for the build script Instead of manipulating the script classpath directly, it is recommended to apply plugins that come with their own classpath. For custom build logic, the recommendation is to use a custom plugin. If your build script needs to use external libraries, you can add them to the script’s classpath in the build script itself. You do this using the buildscript() method, passing in a block which declares the build script classpath. The block passed to the buildscript() method configures a ScriptHandler instance. You declare the build script classpath by adding dependencies to the classpath configuration. This is the same way you declare, for example, the Java compilation classpath. You can use any of the dependency types except project dependencies. Having declared the build script classpath, you can use the classes in your build script as you would any other classes on the classpath. The following example adds to the previous example, and uses classes from the build script classpath.

import org.apache.commons.codec.binary.Base64

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

tasks.register('encode') {
    doLast {
        def byte[] encodedString = new Base64().encode('hello world\n'.getBytes())
        println new String(encodedString)
    }
}

你可以把buildScript块想象成来自Gradle核心的内容,就像已经在Gradle内部的plugins{}块。 所有的插件都来自父build的buildScript。Gradle将在所有嵌套构建中可用。gradle模块。