当前位置: 首页 > 知识库问答 >
问题:

Gradle processResources-文件包含$字符

王长卿
2023-03-14

如何在包含字符的文件上执行gradle processResources,而不转义文件中的字符?

我有一些静态html文件,位于Spring Boot参考文档建议的“资源/静态”文件夹中。然而,当我尝试执行gradle processResources时,gradle抛出了一个异常

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>

据我所知,出现此问题的原因是,其中一个静态文件中有一个字符,并且在处理资源时,它是表达式的保留字符。

建议的解决方案:

>

configure(tasks.processResources) {
    exclude 'static/dollar.html'
}

我还看到,您可以过滤已处理的资源。我想这就是我想做的,但我还没有找到“忽略$过滤器”,有吗?

configure(tasks.processResources) {
    filesMatching('static/dollar.html') {
        filter = ???
    }
}

其他建议?

美元。导致问题的html文件可以简化为:

<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
    <div>Dollar $</div>
</body>

共有2个答案

轩辕欣可
2023-03-14

仅供将来参考:

您也可以将$写成超文本标记语言实体:

季凡
2023-03-14

JB Nizet的评论提供了宝贵的见解。这个问题确实是由于使用了expand(扩展)(虽然由于它位于父项目中的allProjects()脚本中,所以无法立即看到)。首先添加的原因是希望填充信息。构建。*应用程序中的属性。属性(以便通过Spring Boot的infoendpoint提供)。

解决方案:使用filesMatch()扩展()选定的文件。以下片段解决了与Spring Boot相关的具体问题:

processResources {
    filesMatching('application.properties') {
        expand(project.properties)
    }
}
 类似资料:
  • SSI 指令为用户提供在 Web 服务器处理之前将一个文件的内容插入到另一个文件的方法。ASP 只使用这一机制的 #include 指令。要在 .asp 文件中插入一个文件,使用下面的语法: <!--#include virtual | file ="filename"--> virtual 和 file 关键字指示用来包含该文件的路径的类型,filename 是您想包含的文件的路径和名称。 被包

  • 文件包含 可以使用source和.关键字,如: source ./function.sh . ./function.sh 在bash里,source和.是等效的,他们都是读入function.sh的内容并执行其内容(类似PHP里的include),为了更好的可移植性,推荐使用第二种写法。 包含一个文件和执行一个文件一样,也要写这个文件的路径,不能光写文件名,比如上述例子中: . ./functio

  • include 标签是模板开发中最最常用的标签之一,它可以在模板中包含其它模板的内容;用法如下: <include file='模版1,模版2,...' /> 请不要在include 的模板文件中使用模板布局或者模板继承 file 属性的定义规则: 以前台simlpeboot3主题为例: 控制器/操作 <include file="public/header" /> <!-- 以上表示包含当前

  • tc_include tc_include是前台模板包含文件的方法,用于替换原来的include的标签,实现更多功能 用法: <tc_include file="Public:nav"/> <!--加载的是当前模板的Public/nav.html--> <tc_include file="Public/nav"/> <!--加载的是当前模板的Public/nav.html--> <tc_inclu

  • include 标签是模板开发中最最常用的标签之一,它可以在模板中包含其它模板的内容;用法如下: <include file='模版1,模版2,...' /> 请不要在include 的模板文件中使用模板布局或者模板继承 file 属性的定义规则: 以前台simlpeboot3主题为例: 控制器/操作 <include file="public/header" /> <!-- 以上表示包含当前

  • 在当前模版文件中包含其他的模版文件使用include标签,标签用法: {include file='模版文件1,模版文件2,...' /} 包含的模板文件中不能再使用模板布局或者模板继承。 使用模版表达式 模版表达式的定义规则为:模块@控制器/操作 例如: {include file="public/header" /} // 包含头部模版header {include file="public/