งาน Gradle SubProject ไม่ได้รับการหยิบขึ้นมา
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";
}
ไม่เกี่ยวข้องกับคำถามนี้:
ในตัวอย่างที่สองของคุณอาจยังCreateMessageKeys
ไม่มีงานนี้อยู่เมื่อได้รับการประเมิน วิธีแก้ปัญหาที่เป็นไปได้อย่างหนึ่งคือ:
subprojects.each {
it.afterEvaluate {
it.test.dependsOn(...)
}
}
หรือเพียงแค่ใส่คำจำกัดความของงานไว้เหนือบล็อกนี้ก็สามารถแก้ปัญหานี้ได้