es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El archivo eachFile en la tarea de copia de Gradle no está funcionando.

Tengo una regla de Gradle como esta:

tasks.addRule("Patrón: updatelight<path> (copia archivos a ../<path>).") { String taskName ->
  if (taskName.startsWith("updatelight")) {
    task([ "type": Copy ], taskName) {
  def projectGroups = (sub + root)

  def testEnvPath = taskName - 'updatelight'
  into ("../${testEnvPath}/")


  logger.info("Copia user.xml")
  projectGroups.each { project ->
    if (!project.isEmpty()) {
      from (project.output) {
        into "cfg/${project.newPath}"

        eachFile { file ->
          println "  ${file.sourcePath} -> ${file.path}" 
          println '----------------------------------------------'
        }
      }
    }
  }
[...]

Mi problema es que cadaFile { … } no imprime en la consola. ¿Alguna sugerencia? Soy nuevo en Gradle y solo intento agregar algún registro a la tarea existente.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema con esta regla Gradle es que el código dentro del bloque eachFile no se está ejecutando. Para solucionar esto, puedes probar agregando la llamada al método outputs.upToDateWhen { false } antes del bloque eachFile. Esto indica a Gradle que esta tarea siempre está desactualizada y siempre debe ser ejecutada, asegurando que el código dentro del bloque eachFile también se ejecute.

    El código actualizado se vería así:

    tasks.addRule("Pattern: updatelight<path> (copies files to ../<path>).") { String taskName ->
      if (taskName.startsWith("updatelight")) {
        task([ "type": Copy ], taskName) {
    
          def projectGroups = (sub + root)
          def testEnvPath = taskName - 'updatelight'
          into ("../${testEnvPath}/")
    
          outputs.upToDateWhen { false } // Agrega esta línea
    
          logger.info("Copies user.xml")
          projectGroups.each { project ->
            if (!project.isEmpty()) {
              from (project.output) {
                into "cfg/${project.newPath}"
    
                eachFile { file ->
                  println "  ${file.sourcePath} -> ${file.path}" 
                  println '----------------------------------------------'
                }
              }
            }
          }
    [...]
    

    Esto asegurará que el código dentro del bloque eachFile se ejecute y que la salida se imprima en la consola.

Comments are closed.