【问题标题】:How to not Escape : Characters in Ant propertyfile task如何不转义:Ant propertyfile 任务中的字符
【发布时间】:2011-07-02 15:16:32
【问题描述】:

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

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

但在属性文件中,我得到了带有额外 \ 的属性值:

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

我尝试了&lt;echo&gt; 任务,但它删除了其他属性。在这种情况下,我也尝试了像下面这样的连接,我也得到了额外的\

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

【问题讨论】:

  • 你确定吗?它在这里工作正常。
  • 是的,它工作正常。谢谢JB

标签: ant


【解决方案1】:

我发现当我使用回显任务时,该条目在文件中按预期\期望出现。

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

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

【讨论】:

    【解决方案2】:

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

    您似乎无法将&lt;propertyfile/&gt; 设置为不这样做。对我来说似乎是一个错误。

    &lt;replace&gt; 的建议似乎是 imo 的最佳行动方案。

    【讨论】:

      【解决方案3】:

      刚刚在更改 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}" />
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • Apache log4j 似乎没有意识到这一点。 \ 符号不受影响直接进入您的转换模式,然后进入日志文件。
        • 对 Ant 公平地说,它可能使用标准的 Java 属性编写器来转义冒号,因为它们是等号的替代品(没有人使用).. 请参阅此处 docs.oracle.com/javase/6/docs/api/java/util/…。但是由于许多属性文件的用户无法处理它(似乎)它应该是可选的
        猜你喜欢
        • 2011-03-27
        • 2012-10-10
        • 2013-08-22
        • 2011-07-04
        • 1970-01-01
        • 2010-10-03
        • 1970-01-01
        • 2019-04-23
        • 1970-01-01
        相关资源
        最近更新 更多