studio setup reading limpiar intellij home from eliminar delete clean cash cache gradle build.gradle

setup - ¿Cómo extiendo la tarea limpia de gradle para eliminar un archivo?



limpiar cache gradle (3)

Hasta ahora he agregado lo siguiente a mi build.gradle

apply plugin: ''base'' clean << { delete ''${rootDir}/api-library/auto-generated-classes/'' println ''${rootDir}/api-library/auto-generated-classes/'' }

Sin embargo, no solo mi archivo no se elimina, sino que la declaración de impresión muestra que ${rootDir} no se está convirtiendo al directorio raíz de mi proyecto. ¿Por qué no funciona esto, qué conceptos me estoy perdiendo?


Para extender la tarea de limpieza, puede usar

clean.doFirst {}

o

clean.doLast {}

Esto le permitirá inyectar sus propias acciones en el proceso de limpieza. Para eliminar archivos y directorios, puede usar la API "archivo" que no requiere ningún complemento adicional.

Aquí hay un ejemplo que eliminará tanto un archivo como un directorio como el último paso en la tarea de limpieza:

clean.doLast { file(''src/main/someFile.txt'').delete() file(''src/main/libs'').deleteDir() }


Solo necesitas usar comillas dobles. Además, suelte el << y use doFirst en su lugar si planea eliminar durante la ejecución. Algo como esto:

clean.doFirst { delete "${rootDir}/api-library/auto-generated-classes/" println "${rootDir}/api-library/auto-generated-classes/" }

Los scripts de construcción de Gradle están escritos en Groovy DSL. En Groovy necesita usar comillas dobles para la interpolación de cadenas (cuando está usando ${} como marcadores de posición). Eche un vistazo here .


<< es equivalente a clean.doLast . doFirst y doLast están ordenando las operaciones en la fase de ejecución , que rara vez es relevante para las operaciones de eliminación.

En este caso, no necesita ninguno de ellos. La tarea de limpieza desde la base es de tipo Delete , por lo que simplemente debe pasarle un cierre para indicarle en el momento de la configuración qué eliminar cuando se ejecuta:

clean { delete ''someFile'' }

Como mushfek0001 correctamente lo señala en su respuesta, debe usar comillas dobles para que funcione la interpolación variable:

clean { delete "${buildDir}/someFile" }

Necesitas tener al menos el plugin base aplicado para que esto funcione, la mayoría de los otros complementos, como el plugin de Java, aplican base o declaran su propia tarea clean de tipo delete Delete task. El error que obtendría si no tiene esto es un método de clean faltante.

apply plugin: ''base''