如何逃避:Ant属性文件任务中的字符

时间:2011-02-23 09:55:01

标签: ant

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

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

但是在属性文件中,我获得了额外\的属性值:

jndiname=java\:comp/env/wm/default

我尝试了<echo>任务但删除了其他属性。在这种情况下我也尝试过串联,如下所示我也得到额外的\

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

4 个答案:

答案 0 :(得分:5)

\之前的:是转义字符。虽然这里没有必要,因为:不是键的一部分,但是它是值的一部分,它也不会受到伤害。使用Properties.load()加载此属性文件将取消:。你不应该关心逃跑。

答案 1 :(得分:4)

刚刚遇到同样的问题,更改了Websphere 6.1&amp ;;读取的属性文件。最终不得不做这个解决方法:

<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}" />

答案 2 :(得分:3)

“最佳答案”并未真正解决问题。 Properties.load()不是这种情况下的答案(极有可能),你不会控制将使用属性文件的“另一面”。

似乎您无法将<propertyfile/>设置为不执行此操作。对我来说似乎是一个错误。

<replace>建议似乎是最好的行动方式。

答案 3 :(得分:1)

我发现当我使用echo任务时,该条目按照文件中的预期\期望出现。

但是,如果我之后运行属性文件任务以使用某些值填充同一文件,则它会转义文件中的所有冒号。

为了解决这个问题,我只是确保先运行属性文件任务,然后再运行echo。