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

其他回答

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

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

我相信buildscript{}中的所有内容都可以用于当前的构建脚本本身以及它的所有子项目。

对于在buildscript{}之外的文件中声明的属性,它不会立即对给定项目本身的buildscript可用,而是对其所有子项目可用。

So if you want to declare something and use it for the buildscript itself right away (current buildscript and not just subproject's buildscript), declare them in the buildscript {} for the current project and it also has the side effect to let subproject use it later on. If you just want to declare something globally (for sub-projects's buildscripts) you can declare them directly as ext {} in parent project. The parent project won't be able to use them for itself's buildscript but it will be available all the subproject to use, in or out of the buildscript clause.

例如在父项目中:

ext {
    kotlin_version_XX = '1.7.10' 
}

buildscript {
    ext {
      kotlin_version = '1.7.10' 
    }
    // kotlin_version will be available here since declared in buildscript{}
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 

    // will NOT be available here -- error due to kotlin_version_XX declared in project 
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version_XX" 
}

如果你有一个子项目:


dependencies {
   
    // both kotlin_version and kotlin_version_XX can be used here, since it was declared in parent project
    implementation "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    implementation "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version_XX"
}

buildscript {
    
    // both kotlin_version and kotlin_version_XX can even be used here for subproject's script's use, since it was already declared in parent project
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version_XX"
}

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

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

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