【问题标题】:Escaping of slashes in Apache Ant在 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\\

这是不正确的

【问题讨论】:

    标签: apache ant properties-file


    【解决方案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 而言,尾部的反斜杠是没有意义的。
    猜你喜欢
    • 2011-11-04
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多