为gradle插件定义的任务创建依赖关系

时间:2017-12-01 13:09:39

标签: android gradle

我在我的build.gradle文件中应用了一个gradle插件,它提供了三个任务(每个构建变体一个),我想确保每次构建任务完成时都会运行这些任务。此外,我创建了另一个任务,我想在其中一个插件任务完成时运行。到目前为止,这是gradle文件:

apply plugin: 'com.android.library'
apply plugin: 'com.jaredsburrows.license'

android {
    buildToolsVersion rootProject.ext.buildToolsVersion
    compileSdkVersion rootProject.ext.compileSdkVersion

    defaultConfig {
        minSdkVersion rootProject.ext.minimumSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion

        // etc
    }

    buildTypes {
        debug {
            // etc
        }

        staging {
            // etc
        }

        release {
            // etc
        }
    }
}

task copyLicenseToSrc {
    doLast {
        // etc
    }
}

build.finalizedBy(tasks.findByName('licenseDebugReport'))
tasks.findByName('licenseDebugReport').finalizedBy(copyLicenseToSrc)

jaredsburrows插件会生成license*Report个任务。每当我尝试使用tasks.getByName('licenseDebugReport)tasks.getByName('licenseReleaseReport)引用任务时,我都会收到一个未找到任务的异常。

此处有任务窗格的屏幕截图供参考。

enter image description here

如何与插件定义的任务进行交互?

1 个答案:

答案 0 :(得分:0)

似乎该插件会延迟这些任务。

你可以尝试三件我想到的事情。

1。尝试进一步延迟,在afterEvaluate { }块中进行依赖项设置,这将在项目评估后执行,但仍处于配置阶段。

2。您可以使用LicenseReportTask操作tasks.withType(LicenseReportTask) { build.finalizedBy it; it.finalizedBy copyLicense }类型的所有任务。这将立即在该类型的所有现有任务上执行,并在将来添加后立即添加的所有任务上执行。

3。您可以使用插件使用的相同机制,尝试使用android.libraryVariants.all { variant -> build.finalizedBy tasks."license${variant.name.capitalize()}Report"; tasks."license${variant.name.capitalize()}Report".finalizedBy copyLicense }

是否正常工作