2015-05-28 121 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

相關問題