Las tareas de Gradle SubProject no se recogen
Aug 17 2020
Tengo una configuración de varios módulos para un proyecto Java con la siguiente estructura.
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
en mainApp/build.gradle
lo que he mencionado
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";
}
y core-module/build.gradle
tengo un objetivo de prueba como
test {
useTestNG() {
useDefaultListeners = true
suites 'test/testng.xml'
}
}
pero obtengo el error como se muestra a continuación. ¿Qué me estoy perdiendo aquí?
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)
Editar
subprojects {
test.dependsOn(rootProject.tasks['CreateMessageKeys'])
}
task CreateMessageKeys(type: CreateMessageKeysTask) {
destDir = "bundle-common/src/";
outputClass = "common.messages.MessageKeys";
}
Genera el error:
* What went wrong:
A problem occurred evaluating root project 'myApp'.
> Task with name 'CreateMessageKeys' not found in root project 'mainApp'.
Respuestas
1 JensV Aug 17 2020 at 18:57
La definición de la tarea no parece correcta, consulte definición de tareas .
Debe tener un aspecto como este:
task ('CreateMessageKeys', type: CreateMessageKeysTask) {
destDir = "bundle-common/src/";
outputClass = "common.messages.MessageKeys";
}
o
task (CreateMessageKeys, type: CreateMessageKeysTask) {
destDir = "bundle-common/src/";
outputClass = "common.messages.MessageKeys";
}
Irrelevante para esta pregunta:
En su segundo ejemplo, quizás la tarea CreateMessageKeys
aún no existe cuando se evalúa. Una posible solución sería la siguiente:
subprojects.each {
it.afterEvaluate {
it.test.dependsOn(...)
}
}
O simplemente poner la definición de la tarea encima de este bloque podría resolver esto.