Projects, plugins and tasks(项目,插件,任务)

每个Gradle构建都由一个或多个项目组成。项目所代表的内容取决于你在用Gradle做什么。例如,一个项目可能代表一个库JAR或一个web应用程序。它可能表示由其他项目生成的jar组合而成的发行版ZIP。项目并不一定代表要构建的东西。它可能表示要做的事情,例如将应用程序部署生产环境。
Gradle在一个项目中可以做的工作是由一个或多个任务定义的。任务表示构建执行的一些原子工作。这可能是编译一些类、创建JAR、生成Javadoc或将一些存档发布到存储库。

通常,任务是通过应用插件来提供的,这样你就不必自己定义它们了。尽管如此,为了让你了解什么是任务,我们将在本章中讨论如何在一个项目的构建中定义一些简单的任务。

构建脚本的外部依赖项(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.

翻译为:
建议应用自带类路径的插件,而不是直接操作脚本类路径。对于自定义构建逻辑,建议使用自定义插件。
如果构建脚本需要使用外部库,可以将它们添加到构建脚本本身的脚本类路径中。您可以使用buildscript()方法,传入一个声明构建脚本类路径的块。

如下案例:

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

传递给buildscript()方法的块配置ScriptHandler实例。您可以通过向类路径配置添加依赖项来声明构建脚本类路径。例如,这与声明Java编译类路径的方式相同。除了项目依赖项,您可以使用任何依赖项类型。

声明了构建脚本类路径后,您可以像使用类路径上的任何其他类一样使用构建脚本中的类。下面的示例添加到前面的示例,并使用来自构建脚本类路径的类。

  • classpath:一般是添加 buildscript 本身需要运行的东西,buildScript是用来加载gradle脚本自身需要使用的资源,可以声明的资源包括依赖项、第三方插件、maven仓库地址等。
    某种意义上来说,classpath 声明的依赖,不会编译到最终的 apk 里面。
  • implementation、api :在模块中的build.gradle中,给 dependencies 中添加的使应用程序所需要的依赖包,也就是项目运行所需要的东西。

如下所示:定义一个任务,来使用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插件的更多信息,请参考使用Gradle插件

每个项目都自动具有BuildEnvironmentReportTask类型的buildEnvironment任务,可以调用该任务来报告构建脚本依赖项的解决方案。