在Gradle中如何区分任务和其他代码块?

在Gradle中如何区分任务和其他代码块?,gradle,Gradle,我有一个build.gradle文件,是从在线示例中拼凑而成的: apply plugin: "java" sourceSets { java { srcDirs = ['src'] } } repositories { flatDir { name "fileRepo" dirs "repo" } } uploadArchives { repositories { add projec

我有一个build.gradle文件,是从在线示例中拼凑而成的:

apply plugin: "java"

sourceSets {
    java {
        srcDirs = ['src']
    }
}

repositories {
    flatDir {
        name "fileRepo"
        dirs "repo"
    }
}

uploadArchives {
    repositories {
        add project.repositories.fileRepo
    }
}

当我运行
gradletasks--all
时,我可以看到“uploadArchives”是一项任务。如何通过查看build.gradle文件来判断什么是任务?如果“存储库”和“源集”不被视为任务,那么它们是什么呢?

你根本不能这样做。

但是,一个闭包是否配置了一个任务或其他东西的纯知识不会给你任何东西。要理解构建脚本,您需要了解Gradle的基本概念和使用的插件,无论是内置的还是第三方的

每个
build.gradle
脚本都针对一个实例执行。可以从生成脚本访问的所有内容都属于以下范围之一:

  • 项目
    对象本身。此范围包括项目实现类声明的任何属性getter和setter。例如,
    getRootProject()
    可以作为
    rootProject
    属性访问。此作用域的属性是可读写的,具体取决于相应getter或setter方法的存在
  • 项目的额外属性。每个项目都维护一个额外属性的映射,这些属性可以包含任意名称->值对。定义后,此作用域的属性是可读写的。有关更多详细信息,请参阅
  • 插件添加到项目中的扩展。每个扩展都是只读属性,与扩展名同名
  • 插件添加到项目中的约定属性。插件可以通过项目的
    约定
    对象向项目添加属性和方法。此作用域的属性可以是可读或可写的,具体取决于约定对象
  • 项目的任务。任务可以通过使用其名称作为属性名称来访问。此作用域的属性是只读的。例如,名为compile的任务可以作为
    compile
    属性访问
  • 额外属性和约定属性从项目的父级继承,递归到根项目。此作用域的属性是只读的
对于您的特定示例,
uploadArchives
是一项任务,
repositories
属于原始的
Project
对象(它在每个构建脚本中都可用),而
sourceset
java
插件的扩展


请注意,许多插件不需要或计划直接任务配置。它们为配置提供DSL扩展,然后根据此配置生成任务。

您根本不能。

但是,一个闭包是否配置了一个任务或其他东西的纯知识不会给你任何东西。要理解构建脚本,您需要了解Gradle的基本概念和使用的插件,无论是内置的还是第三方的

每个
build.gradle
脚本都针对一个实例执行。可以从生成脚本访问的所有内容都属于以下范围之一:

  • 项目
    对象本身。此范围包括项目实现类声明的任何属性getter和setter。例如,
    getRootProject()
    可以作为
    rootProject
    属性访问。此作用域的属性是可读写的,具体取决于相应getter或setter方法的存在
  • 项目的额外属性。每个项目都维护一个额外属性的映射,这些属性可以包含任意名称->值对。定义后,此作用域的属性是可读写的。有关更多详细信息,请参阅
  • 插件添加到项目中的扩展。每个扩展都是只读属性,与扩展名同名
  • 插件添加到项目中的约定属性。插件可以通过项目的
    约定
    对象向项目添加属性和方法。此作用域的属性可以是可读或可写的,具体取决于约定对象
  • 项目的任务。任务可以通过使用其名称作为属性名称来访问。此作用域的属性是只读的。例如,名为compile的任务可以作为
    compile
    属性访问
  • 额外属性和约定属性从项目的父级继承,递归到根项目。此作用域的属性是只读的
对于您的特定示例,
uploadArchives
是一项任务,
repositories
属于原始的
Project
对象(它在每个构建脚本中都可用),而
sourceset
java
插件的扩展

请注意,许多插件不需要或计划直接任务配置。它们为配置提供DSL扩展,然后基于此配置生成任务