【问题标题】:How to tell tasks and other code blocks apart in Gradle?如何在 Gradle 中区分任务和其他代码块?
【发布时间】:2018-03-22 21:16:50
【问题描述】:

我有一个从在线示例拼凑而成的 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 文件来判断什么是任务?如果“repositories”和“sourceSets”不被视为任务,它们是什么?

【问题讨论】:

    标签: gradle


    【解决方案1】:

    你根本做不到。

    但是,仅仅知道闭包是配置任务还是其他东西,不会给你任何东西。要了解构建脚本,您需要了解 Gradle 的基本概念以及使用的插件,无论是内置的还是第三方的。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多