私は簡単なのGradleスクリプト(私のGradleのタスクが実行されたときだけログに記録する)Gradle 3.0.0(Androidスタジオ3.0で)タスクシーケンスを並べ替える(Kotlinモジュールでコンパイルするとき)?
class TestScriptTask extends DefaultTask {
@TaskAction
def testScript() {
logger.quiet("My Gradle Task Here")
}
}
project(":app") {
task testScript(type: TestScriptTask) {
}
}
を持っていると私はKotlinにおけるモジュール「remotelib」に依存している簡単なAndroidのプロジェクト、「アプリ」を持っています。
マイアプリのbuild.gradleの依存関係
私は./gradlew :app:assembleRelease :app:testScript
以下のように私のGradleタスクを実行するときに、スクリプトが以下のように実行され
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile project(':remotelib')
// and others
}
以下のように(ここでは、タスクの点に注意してください。最初に実行されます)
> 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のバグ、またはタスクの順序を処理する新しい方法ですか?
更新
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'タスクは' remotelib'のKotlinコンパイルに依存している(少なくともここに掲載されたコードでは)指定していません。これは、 'dependsOn'関係か' test'タスクの入力として 'app'の' compile'設定を使うことで行うことができます。それ以外の場合、これらの2つのタスク間の実行順序は未定義であり、それらは任意の順序で実行できます。 – hotkey
ありがとう@hotkey。 ':app:testScriptタスクはremotelibのKotlinコンパイルに依存していますか?'ありがとう。 – Elye
ようこそ。私はそれが答えの中でどのように行われるのかを記述しました。 – hotkey