Gradle 3.0.0(在Android Studio 3.0中)重新排列任务序列(用Kotlin模块编译时)?

我有一个简单的Gradle脚本(只是为了记录我的Gradle任务运行时)

class TestScriptTask extends DefaultTask { @TaskAction def testScript() { logger.quiet("My Gradle Task Here") } } project(":app") { task testScript(type: TestScriptTask) { } } 

我有一个简单的Android项目,“app”依赖于Kotlin中的一个模块“remotelib”。

我的应用程序的build.gradle依赖关系如下

 dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile project(':remotelib') // and others } 

所以当我运行我的gradle任务如下

  ./gradlew :app:assembleRelease :app:testScript 

该脚本运行如下(注意任务在这里执行第一)

 > Task :app:testScript My Gradle Task Here > Task :remotelib:compileReleaseKotlin Using kotlin incremental compilation 

这只发生在开始使用'com.android.tools.build:gradle:3.0.0-beta1' (以及beta2 )。

当我在'com.android.tools.build:gradle:2.3.2' ,顺序是可以的,如所期望的那样

 > Task :remotelib:compileReleaseKotlin Using kotlin incremental compilation > Task :app:testScript My Gradle Task Here 

这是一个gradle 3.0.0错误,或处理任务订单的新方法?

更新

我的项目广泛build.gradle如下

 buildscript { ext.kotlin_version = '1.1.2-4' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0-beta1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply from: 'test_script.gradle' allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } 

Android Gradle插件3.0.0及其与Kotlin插件的互操作有很多变化,并且这些变化可能还包括一些影响任务排序的变化。

然而,在你的例子中,你不指定(至少在这里发布的代码)你的:app:testScript任务取决于:app:testScript Kotlin编译。 因此这两个任务之间的执行顺序是不确定的,可以按任意顺序运行。

这可以通过以下之一来完成:

  • testScript.dependsOn configurations.compile

    由于您已经将compile project(':remotelib')app的依赖关系,因此使得testScript依赖于configurations.compile也会触发项目中的默认配置:remotelib ,从而也编译它中的Kotlin。

  • testScript.dependsOn project(':remotelib').compileKotlin

    这明确指定该任务取决于:remotelib:compileKotlin ,但它需要:remotelib之前评估:app (您可能需要添加evaluationDependsOn ':remotelib'行到您的:app的构建脚本)。