我有一个简单的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
}
答案 0 :(得分:2)
Android Gradle插件3.0.0及其与Kotlin插件的互操作有很多变化,这些变化可能还包括一些影响任务排序的变化。
但是,在您的示例中,您没有指定(至少在此处发布的代码中):app:testScript
任务依赖于:remotelib
中的Kotlin编译。因此,这两个任务之间的执行顺序是未定义的,它们可以以任意顺序运行。
这可以通过以下方式之一完成:
testScript.dependsOn configurations.compile
由于您已将compile project(':remotelib')
添加到app
的依赖项,因此testScript
依赖于configurations.compile
也会触发项目中{{1}的默认配置的构建因此也在其中编译Kotlin。
:remotelib
这明确指明任务取决于testScript.dependsOn project(':remotelib').compileKotlin
,但需要在:remotelib:compileKotlin
之前评估:remotelib
(您可能需要将:app
行添加到{ {1}}的构建脚本)。