Tratando de entender el archivo gradle.
Estoy intentando cambiar un archivo build.gradle
de un proyecto existente que me entregaron. Soy nuevo en gradle y groovy, por lo que estoy intentando decodificar lo que está haciendo exactamente. La documentación de gradle y groovy no me está ayudando mucho. Aquí hay un ejemplo:
apply plugin: "java"
apply plugin: 'idea'
apply plugin: 'war'
apply plugin: 'org.springframework.boot'
apply plugin: 'org.flywaydb.flyway'
apply plugin: "net.saliman.cobertura"
apply plugin: 'org.sonarqube'
apply plugin: 'org.owasp.dependencycheck'
apply plugin: 'maven'
apply plugin: 'maven-publish'
apply plugin: 'io.spring.dependency-management'
// mucho código aquí....
task('devRun') {
doLast {
bootRun {
systemProperty "spring.profiles.active", "local, dev"
if (System.getenv('DEBUG') == 'true') {
jvmArgs '-Xdebug',
'-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5081'
}
}
}
}
Para mí, parece que hay varias definiciones de cierre anidadas, lo que significa que task
es el cierre exterior, doLast
es el cierre interno y bootRun
es un cierre aún más interno. ¿Pero no son los cierres groovy de la forma {declaración...}
y no etiqueta {declaración...}
? Además, ¿no son todas estas palabras clave o tareas predefinidas de otros complementos? Si ese es el caso, ¿qué significa decir doLast {declaración...}
o bootRun {declaración...}
? ¿Esto está sobrescribiendo doLast
predefinido? y lo mismo para bootRun
. No estoy encontrando ningún ejemplo en la documentación que se parezca exactamente a este fragmento de código. ¿Podría alguien explicar qué reglas de sintaxis de groovy se aplican aquí?
davy.ai
Sí, el fragmento de código está definiendo varios closures anidados.
task
,doLast
ybootRun
son palabras clave o tareas predefinidas de otros plugins.En Gradle,
task
es un método que crea un objeto de tarea.doLast
es un método del objeto de tarea que define la acción que se realizará cuando se ejecute la tarea.bootRun
es una tarea proporcionada por el pluginorg.springframework.boot
, que permite ejecutar la aplicación Spring Boot.En Groovy, los closures tienen la forma de
{afirmación...}
oetiqueta {afirmación...}
. Sin embargo, en el contexto de Gradle, el métodotask
y otros métodos específicos de Gradle aceptan closures con una etiqueta en lugar de utilizar llaves.Por lo tanto,
doLast {afirmación...}
es simplemente una forma abreviada dedoLast { -> afirmación...}
, donde->
es la sintaxis de Groovy para definir un closure sin argumentos. De manera similar,bootRun {afirmación...}
es una forma abreviada debootRun { -> afirmación...}
.El fragmento de código está definiendo una tarea Gradle llamada
devRun
, que configura la tareabootRun
del pluginorg.springframework.boot
para establecer la propiedad del sistemaspring.profiles.active
enlocal, dev
. Si la variable de entornoDEBUG
se establece entrue
, también agrega algunos argumentos JVM para habilitar la depuración remota.En general, el fragmento de código es un ejemplo de cómo se pueden personalizar y configurar las tareas de Gradle utilizando la sintaxis de closure.