2015-05-28 87 views
1

我想让默认 gradle这个任务依赖于自定义任务之一(做了一些工作,默认任务踢之前),但dependsOn结构似乎并不为任务可用的工作。例如:为什么Gradle中的某些任务不显示为属性?

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线,你会得到一个错误信息:

找不到财产“assembleAmazonDebug”上项目“:应用程序”。

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

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

+0

我的答案能解决问题吗? – Opal

回答

1

发生这种情况是因为某些任务是在脚本评估期间创建的,因此它们在配置时不可用,但仅在运行时才可用。我不知道有关语法(如果有可能在这个级别OD评估,以确定相关性),但尝试:

project.afterEvaluate { 
    assembleAmazonDebug.dependsOn info 
} 

它将定义刚过所有的插件应用,所有的任务都产生了依赖。

+1

优秀 - 不知道afterEvaluate - 谢谢,欧泊! – Ken

相关问题