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.
davy.ai
Basándonos en los fragmentos de código proporcionados, parece que las declaraciones
exclude
que agregaste paraMETA-INF/persistence.xml
ylog4j2.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ónfrom
. 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ónfrom
, pero no estás especificando una carpeta de destino coninto
. Esto significa que este archivo se agregará en la raíz del archivo jar en lugar de en la carpetaMETA-INF
, lo cual probablemente no era tu intención.Para solucionar esto, puedes agregar una declaración
into
paralog4j2.xml
de la siguiente manera:Esto debería agregar
log4j2.xml
en la ruta correcta dentro del archivo jar.