在 Apache Ant 中转义斜线
Posted
技术标签:
【中文标题】在 Apache Ant 中转义斜线【英文标题】:Escaping of slashes in Apache Ant 【发布时间】:2019-07-28 20:35:41 【问题描述】:使用 Apache Ant,我希望我的属性文件能够输出
blurb=test\n\
但是有了这个,\n\ 将在构建过程中转义斜线
<propertyfile file="about.properties">
<entry key="blurb" value="test\n\"/>
</propertyfile>
所以输出将是
blurb=test\\n\\
这是不正确的
【问题讨论】:
【参考方案1】:您可以使用内置的line.separator
属性在propertyfile
任务中回显文字字符串\n
。但是,如果您在非 Unix 系统上运行脚本,这将产生不同的输出,例如 \r\n
。
<propertyfile file="about.properties">
<entry key="blurb" value="test$line.separator" />
</propertyfile>
结果:
#Thu, 07 Mar 2019 10:33:16 -0800
blurb=test\n
关于尾随反斜杠,这是不可能的,因为propertyfile
任务不只是盲目地将字符串回显到文件中;它主动维护一个属性文件并应用自动格式化。尾随转义字符只是被格式化为空,因为它后面没有任何东西可以转义。
例如,如果您手动创建了以下属性文件:
blurb=test\n\
...然后运行如下代码:
<propertyfile file="buildNumber.properties">
<entry key="anotherProperty" value="anotherValue" />
</propertyfile>
你会得到这个:
#Thu, 07 Mar 2019 10:42:43 -0800
blurb=test\n
anotherProperty=anotherValue
尽管脚本甚至没有对blurb
属性做任何事情,但反斜杠被删除了。
如果你真的,真的出于某种原因想要将blurb=test\n\
写入文件,你可以使用replaceregexp
任务(或者只是replace
任务,如果你知道的话)确切地说是现有值):
<replaceregexp
file="about.properties"
match="blurb=.*"
replace="blurb=test\\\\n\\\"
/>
【讨论】:
您忘记了java.util.Properties.read()
将尾随的单个反斜杠解释为“继续”字符的事实:这允许在多行上具有属性的值。应用 Ant 脚本后它在此处消失,因为 Properties.store()
总是将值写入单行。
@Lolo 这只是为了便于阅读而格式化;属性值本身不包含反斜杠。就 Ant 而言,尾部的反斜杠是没有意义的。以上是关于在 Apache Ant 中转义斜线的主要内容,如果未能解决你的问题,请参考以下文章