GradleSubProjectタスクが取得されていません
Aug 17 2020
次の構造のJavaプロジェクト用のマルチモジュールセットアップがあります。
mainApp
|--> core-module
| |--> src
| |--> build.gradle
| |--> gradle.properties
|
|--> lib-module
| |--> src
| |--> build.gradle
| |--> gradle.properties
|--> lib-another-module
| |--> src
| |--> build.gradle
| |--> gradle.properties
|--> settings.gradle
|--> build.gradle
でmainApp/build.gradle
私が述べてきました
subprojects {
test.dependsOn "CreateMessageKeys"
//test.dependsOn ":CreateMessageKeys"
//test.dependsOn ("CreateMessageKeys")
//test.dependsOn (":CreateMessageKeys") none of this working....
}
task CreateMessageKeys(type: CreateMessageKeysTask) {
destDir = "bundle-common/src/";
outputClass = "common.messages.MessageKeys";
}
そして私core-module/build.gradle
はテストターゲットを持っています
test {
useTestNG() {
useDefaultListeners = true
suites 'test/testng.xml'
}
}
しかし、以下のようなエラーが発生します。ここで何が欠けていますか?
Caused by: groovy.lang.MissingMethodException: No signature of method: java.lang.String.dependsOn() is applicable for argument types: (String) values: [CreateMessageKeys]
Possible solutions: respondsTo(java.lang.String)
編集
subprojects {
test.dependsOn(rootProject.tasks['CreateMessageKeys'])
}
task CreateMessageKeys(type: CreateMessageKeysTask) {
destDir = "bundle-common/src/";
outputClass = "common.messages.MessageKeys";
}
エラーが発生します:
* What went wrong:
A problem occurred evaluating root project 'myApp'.
> Task with name 'CreateMessageKeys' not found in root project 'mainApp'.
回答
1 JensV Aug 17 2020 at 18:57
タスク定義が正しくないようです。タスクの定義を参照してください。
次のようになります。
task ('CreateMessageKeys', type: CreateMessageKeysTask) {
destDir = "bundle-common/src/";
outputClass = "common.messages.MessageKeys";
}
または
task (CreateMessageKeys, type: CreateMessageKeysTask) {
destDir = "bundle-common/src/";
outputClass = "common.messages.MessageKeys";
}
この質問とは無関係:
2番目の例でCreateMessageKeys
は、これを評価したときに、タスクがまだ存在していない可能性があります。考えられる回避策の1つは、次のとおりです。
subprojects.each {
it.afterEvaluate {
it.test.dependsOn(...)
}
}
または、このブロックの上にタスク定義を配置するだけで、これを解決できます。