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

또는 단순히이 블록 위에 작업 정의를 배치하면이 문제를 해결할 수 있습니다.