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
的构建脚本)。