the - Extrae métodos comunes del script de construcción de Gradle
project property gradle (2)
Basándome en la respuesta de Peter , así es como exporto mis métodos:
Contenido de helpers/common-methods.gradle
:
// Define methods as usual
def commonMethod1(param) {
return true
}
def commonMethod2(param) {
return true
}
// Export methods by turning them into closures
ext {
commonMethod1 = this.&commonMethod1
otherNameForMethod2 = this.&commonMethod2
}
Y así es como uso esos métodos en otro script:
// Use double-quotes, otherwise $ won''t work
apply from: "$rootDir/helpers/common-methods.gradle"
// You can also use URLs
//apply from: "https://bitbucket.org/mb/build_scripts/raw/master/common-methods.gradle"
task myBuildTask {
def myVar = commonMethod1("parameter1")
otherNameForMethod2(myVar)
}
Aquí hay más sobre la conversión de métodos a cierres en Groovy: link
Tengo un script de construcción de Gradle ( build.gradle
), en el que creé algunas tareas. Estas tareas consisten principalmente en llamadas a métodos. Los métodos llamados también están en el script de compilación.
Ahora, aquí está la situación:
Estoy creando una buena cantidad de scripts de compilación, que contienen diferentes tareas, pero utilizan los mismos métodos del script original. Por lo tanto, me gustaría extraer estos "métodos comunes" de alguna manera, por lo que puedo reutilizarlos fácilmente en lugar de copiarlos para cada nuevo script que creo.
Si Gradle fuera PHP, sería ideal algo como lo siguiente:
//script content
...
require("common-methods.gradle");
...
//more script content
Pero por supuesto, eso no es posible. ¿O es eso?
De todos modos, ¿cómo puedo lograr este resultado? ¿Cuál es el mejor método posible para hacer esto? Ya he leído la documentación de Gradle, pero parece que no puedo determinar qué método será el más fácil y el más adecuado para esto.
¡Gracias por adelantado!
ACTUALIZAR:
Logré extraer los métodos en otro archivo
(utilizando apply from: ''common-methods.gradle''
),
entonces la estructura es la siguiente:
parent/
/build.gradle // The original build script
/common-methods.gradle // The extracted methods
/gradle.properties // Properties used by the build script
Después de ejecutar una tarea desde build.gradle
, me build.gradle
con un nuevo problema: aparentemente, los métodos no se reconocen cuando están en common-methods.gradle
.
¿Algunas ideas de como reparar esto?
No es posible compartir métodos, pero puede compartir propiedades adicionales que contengan un cierre, que se reduce a lo mismo. Por ejemplo, declare ext.foo = { ... }
en common-methods.gradle
, use apply from:
para aplicar el script, y luego llame al cierre con foo()
.