如何不转义:Ant propertyfile任务中的字符

如何不转义:Ant propertyfile任务中的字符,ant,Ant,我的属性文件中有数千个属性,我只想更改一个属性,如下所示 <propertyfile file="${mypropetyfile}"> <entry key="jndiname" value="java:comp/env/wm/default"/> </propertyfile> 我尝试了任务,但它删除了其他属性。我还尝试了如下的连接方式,在本例中,我得到了额外的\ <propertyfile file="${mypropetyfile

我的属性文件中有数千个属性,我只想更改一个属性,如下所示

<propertyfile  file="${mypropetyfile}">
    <entry  key="jndiname" value="java:comp/env/wm/default"/>
</propertyfile> 
我尝试了
任务,但它删除了其他属性。我还尝试了如下的连接方式,在本例中,我得到了额外的
\

<propertyfile  file="${mypropetyfile}">
    <entry  key="jndiname" default="" operation="+" value="java:comp/env/wm/default"/>
</propertyfile> 


之前的
\
是转义字符。虽然这里不需要,因为
不是键的一部分,而是值的一部分,但它也不会造成任何伤害。使用Properties.load()加载此属性文件将取消浏览
。您不应该关心转义。

我发现,当我使用echo任务时,条目在文件中按预期\所需显示出来

但是,如果我在之后运行propertyfile任务,用一些值填充同一个文件,则它会转义文件中的所有冒号


为了解决这个问题,我只需确保首先运行propertyfile任务,然后运行echo

更改Websphere 6.1读取的属性文件时遇到了相同的问题&最终不得不采取以下解决方法:

<property name="jndi.example" value="java:comp/env/example" />

<propertyfile file="jdbc.properties">
    <entry key="datasource.example.jndi" operation="=" value="@EXAMPLE"/>
</propertyfile>

<!-- set tokens to property values because ant wants to 'escape the colon' -->
<replace file="jdbc.properties" token="@EXAMPLE" value="${jndi.example}" />

最佳答案并不能真正解决问题。Properties.load()不是答案,因为在这种情况下(很可能),您将无法控制将使用属性文件的“另一方”

似乎没有。您可以将
设置为不执行此操作。对我来说好像是个虫子


建议在我看来是最好的行动方案。

你确定吗?它在这里很好用。是的,它很好用。谢谢,Apache log4j似乎没有意识到这一点符号不受影响,直接进入转换模式,然后进入日志文件。公平地说,Ant可能使用标准Java属性编写器,它可以转义冒号,因为它们是equals的替代品(noone使用)。。看这里。但是,由于属性文件的许多用户无法处理它(看起来),它应该是可选的
<property name="jndi.example" value="java:comp/env/example" />

<propertyfile file="jdbc.properties">
    <entry key="datasource.example.jndi" operation="=" value="@EXAMPLE"/>
</propertyfile>

<!-- set tokens to property values because ant wants to 'escape the colon' -->
<replace file="jdbc.properties" token="@EXAMPLE" value="${jndi.example}" />