我是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构建输出(例如,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块确定哪些插件、任务类和其他类可用于构建脚本的其余部分。没有buildScript块,你可以使用所有随Gradle附带的东西。如果您还想使用第三方插件、任务类或其他类(在构建脚本中!),则必须在buildScript块中指定相应的依赖项。

我很欣赏彼得的回答……但是我并没有立即明白答案和文档中强调的构建脚本的其余部分意味着什么。

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

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

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

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

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

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

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