Gradle processResources - el archivo contiene $ character
¿Cómo puedes ejecutargradle processResources
en archivos que contienen$
personajes sin escapar de la$
en los archivos?
Tengo algunos archivos html estáticos ubicados en el/resources/static
carpeta como lo sugiere elDocumentos de referencia de Spring Boot. Sin embargo, cuando intento ejecutargradle processResources
Gradle lanza una excepción
Caused by: org.gradle.api.GradleException:
Could not copy file '[...]/src/main/resources/static/dollar.html'
to '[...]/build/resources/main/static/dollar.html'.
[...]
Caused by: groovy.lang.GroovyRuntimeException:
Failed to parse template script (your template may contain an error
or be trying to use expressions not currently supported): startup failed:
SimpleTemplateScript7.groovy: 1: illegal string body character after dollar sign;
solution: either escape a literal dollar sign "\$5"
or bracket the value expression "${5}" @ line 1, column 10.
out.print("""<!DOCTYPE html>
Por lo que yo entiendo, el problema ocurre porque hay una$
carácter en uno de los archivos estáticos y$
es un carácter reservado para expresiones al procesar recursos.
Soluciones propuestas:
Sí, escapando del$
con\$
(como se sugiere en el stacktrace) funciona, pero prefiero no cambiar el archivo html si hay otras opciones disponibles.Intentar excluir el archivo de los recursos del proceso hace que el problema desaparezca, pero tiene el efecto secundario de excluir también la copia del archivo:
configure(tasks.processResources) {
exclude 'static/dollar.html'
}
También he visto que puedes filtrar los recursos procesados. Supongo que esto es lo que me gustaría hacer, pero no he encontrado un "ignorar $ filter", ¿hay alguno?
configure(tasks.processResources) {
filesMatching('static/dollar.html') {
filter = ???
}
}
¿Otras sugerencias?
losdollar.html
El archivo que causa el problema se puede simplificar a:
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<div>Dollar <!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<div>Dollar $</div>
</body>
lt;/div>
</body>