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.

Gradle: Excluir archivo de recursos y añadirlo desde una carpeta diferente.

Estoy intentando construir un archivo jar con Gradle.
Tengo algunos archivos de recursos (como log4j2 y persistence.xml) en src/main/resources
que quiero excluir cuando se construya el jar, por el contrario, tengo los mismos archivos (con contenido diferente en un directorio de proyecto) y quiero copiar estos archivos en lugar de los archivos src/main/resources.

Dentro de mi gradle.build:

from jar {
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    // La carpeta principal es: src/main/resources para el (1) y (2)
    exclude('META-INF/persistence.xml') // (1)
    exclude('log4j2.xml') // (2)

    from('distributions/persistence.xml'){ // (3)
        into 'META-INF'
        filter(ReplaceTokens, tokens: [TEST_PARAM: 'tmp_value1'])
    }

    from('distributions/log4j2.xml') { // (4)
        filter(ReplaceTokens, tokens: [TEST_PARAM: 'tmp_value1'])
    }
}

Así que excluyo los dos archivos manualmente (1), (2), y luego agregué (3), (4).
Cuando extraigo el jar, puedo encontrar persistence.xml pero no log4j2.xml.

Mi pregunta es, ¿por qué sucede esto?

(PS)
Si reemplazo (1), (2) con

processResources.exclude('*')

En el jar se colocan tanto persistence.xml como log4j2.xml.

Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Basándonos en los fragmentos de código proporcionados, parece que las declaraciones exclude que agregaste para META-INF/persistence.xml y log4j2.xml están excluyendo correctamente esos archivos de ser incluidos en el archivo jar.

    Sin embargo, para persistence.xml, estás agregando un archivo nuevo desde una ubicación diferente (distributions/persistence.xml) utilizando la declaración from. Este archivo se incluye en el jar con la ruta correcta (META-INF/persistence.xml).

    Pero para log4j2.xml, también estás agregando un archivo nuevo desde una ubicación diferente (distributions/log4j2.xml) utilizando la declaración from, pero no estás especificando una carpeta de destino con into. Esto significa que este archivo se agregará en la raíz del archivo jar en lugar de en la carpeta META-INF, lo cual probablemente no era tu intención.

    Para solucionar esto, puedes agregar una declaración into para log4j2.xml de la siguiente manera:

    from('distributions/log4j2.xml') {
        into 'META-INF'
        filter(ReplaceTokens, tokens: [TEST_PARAM: 'tmp_value1'])
    }
    

    Esto debería agregar log4j2.xml en la ruta correcta dentro del archivo jar.

Comments are closed.