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

时间:2018-03-22 21:16:51

标签: gradle

我在网上的例子中拼凑了一个build.gradle文件:

apply plugin: "java"

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

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

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

当我运行gradle tasks --all时,我可以看到" uploadArchives"是一项任务。如何通过查看build.gradle文件来判断什么是任务?如果"存储库"和" sourceSets"不被认为是任务,它们是什么?

1 个答案:

答案 0 :(得分:2)

你根本无法

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

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

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

对于您的具体示例,uploadArchives是一项任务,repositories属于原始Project对象(在每个构建脚本中都可用),sourceSets是一个扩展名java插件。

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