Gradle processResources - o arquivo contém $ caractere
Como você pode executargradle processResources
em arquivos que contêm$
caracteres sem escapar do$
nos arquivos?
Eu tenho alguns arquivos html estáticos localizados no diretório/resources/static
pasta, conforme sugerido peloDocumentos de referência do Spring Boot. No entanto, quando tento executargradle processResources
, Gradle lança uma exceção
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>
Pelo que entendi, o problema ocorre porque existe uma$
caractere em um dos arquivos estáticos e$
é um caractere reservado para expressões ao processar recursos.
Soluções propostas:
Sim, escapando do$
com\$
(como sugerido no stacktrace) funciona, mas prefiro não alterar o arquivo html se houver outras opções disponíveis.Tentar excluir o arquivo dos recursos do processo faz com que o problema desapareça, mas tem o efeito colateral de também excluir o arquivo de ser copiado:
configure(tasks.processResources) {
exclude 'static/dollar.html'
}
Também vi que você pode filtrar os recursos processados. Eu acho que é isso que eu gostaria de fazer, mas não encontrei um "ignore $ filter", existe algum?
configure(tasks.processResources) {
filesMatching('static/dollar.html') {
filter = ???
}
}
Outras sugestões?
odollar.html
O arquivo que causa o problema pode ser simplificado para:
<!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>