在 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 中转义斜线的主要内容,如果未能解决你的问题,请参考以下文章

apache_conf 强制落后斜线

Moodle - 如何在 apache2 (ubuntu 14.04) 上启用斜线参数

尾部斜线:是或否? [复制]

斜线与反斜线

关于路径分隔符:正斜线/反斜线双反斜线\的区别

excel表格中制作复杂斜线表头的教程