2011-02-23 33 views
6

我在属性文件中有成千上万的属性,我只想更改下面的一个属性。如何不逃脱: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> 
+0

确定吗?它在这里很好。 – adarshr 2011-02-23 10:02:27

+0

是的,它工作正常。谢谢JB – 2011-03-16 15:38:47

回答

5

\是转义字符。虽然在这里没有必要,因为:不是关键的一部分,但是它是价值的一部分,它也不会伤害。使用Properties.load()加载这个属性文件将会忽略:。你不应该在意逃跑。

+0

看来,Apache log4j并没有意识到这一点。 \符号不会直接影响您的转换模式,然后进入日志文件。 – 2012-08-14 14:27:10

+0

也不是Nuxeo ... – Rhubarb 2014-07-18 16:13:02

+1

为了公平对待Ant,它可能使用标准的Java属性编写器来逃避冒号,因为它们是替代方案(没有人使用),等于...请参阅http://docs.oracle的.com/JavaSE的/ 6 /文档/ API/JAVA/util的/ Properties.html#商店%28java.io.Writer,%20java.lang.String%29。但由于许多属性文件用户无法处理它(看起来),它应该是可选的 – Rhubarb 2014-07-18 16:18:49

1

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

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

为了解决这个问题,我简单地确保我先运行了propertyfile任务,然后是echo。

4

恰好碰到了同样的问题,改变由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}" /> 
3

的“最佳答案”是不是真正解决问题。 Properties.load()不是这种情况下的答案(很有可能),你不会控制将消耗属性文件的'其他方'。

它没有出现,你可以设置<propertyfile/>不这样做。对我来说就像一个错误。

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