ग्रैडल सबप्रोजेक्ट कार्यों को उठाया नहीं जा रहा है

Aug 17 2020

निम्नलिखित संरचना के साथ जावा प्रोजेक्ट के लिए मेरे पास एक मल्टी-मॉड्यूल सेटअप है।

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(...)
    }
}

या बस इस ब्लॉक के ऊपर टास्क डेफिनिशन डालने से यह हल हो सकता है।