为什么Gradle中的某些任务不会显示为属性?

时间:2015-05-28 22:21:59

标签: gradle android-gradle

我想让其中一个默认 gradle任务依赖于自定义任务(在默认任务启动之前做一些工作),但是dependsOn构造似乎没有为可用的每个任务工作。例如:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.company.android.myapplication"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
        PlayStore {
        }
        Amazon {
        }
    }
}

task info << {
    println "Hello, Gradle"
}

// following dependsOn works just fine
assembleDebug.dependsOn info

// following line (uncommented) will cause error
//assembleAmazonDebug.dependsOn info

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.1.1'
}

assembleDebug在示例中运行正常,但取消注释assembleAmazonDebug行,您会收到错误消息:

  

无法在项目':app'上找到属性'assembleAmazonDebug'。

gradlew tasks --all生成一长串任务,其中许多任务不能与dependsOn构造一起使用。

任务之间是否存在一些关键区别,其中一些可以用作属性而一些不能?

1 个答案:

答案 0 :(得分:1)

这是因为某些任务是在脚本评估期间创建的,因此它们在配置时不可用,但仅在运行时可用。我不确定语法(如果可以在此级别评估时定义依赖性),请尝试:

project.afterEvaluate {
   assembleAmazonDebug.dependsOn info
}

在应用所有插件并创建所有任务之后,它将定义依赖关系。