2010-07-29 86 views
3

我在写出一个将目录路径的值保存到属性文件中的属性时遇到问题。在ant中写出文件路径属性问题

我的脚本最初在使用<property file="source.props"/>的道具文件中读取这个特定的属性,称之为'appserver.home'。我已经回应了价值,它正确地读取为C:\\ somedir \\ jboss_4_2_3。

我的脚本接下来要做的是将此值提供给另一个属性文件(由另一个ant脚本使用 - 尽管这不重要)。要创建我使用的是占位符由$包围的那种关模板文件.... $在正确的位置插入正确的价值观这个其他文件,并使用下列内容: -

<copy file="template_file.props" tofile="target.props"> 
    <filterset begintoken="$" endtoken="$"> 
     <filter token="appServerDir" value="${appserver.home}"/> 
     <filter token="dbusername" value="${database.name}"/> 
     .... 
    </filterset> 
</copy>     

的问题是现在在target.props中的值是C:\ somedir \ jboss_4_2_3即它失去了转义字符。当下一个ant脚本使用该文件时,它将该属性值解释为C:somedirjboss_4_2_3

所以这个问题如何告诉蚂蚁,我正在写的值是一个文件路径? 注意我曾尝试以下,这实际上工作: -

<propertyfile file="target.props"> 
    <entry key="appServerDir" value="${appserver.home}"/> 
</propertyfile> 

..也就是说,它输出的名称Ç\:\\ \\ somedir jboss4_2_3,但我宁可不使用这种技术,而使用模板文件的技术,因为它包含了一些性能,这是总是静态的,以及评论等

在此先感谢

回答

3

在这里进行的逃生处理方面,任务之间可能存在一些混淆的区别。

当你说'appserver.home'正确回声时,我想你正在使用'echoproperties'任务,它显示存储的值没有内插转义。并且显示了与'source.props'文件中相同数量的转义。

问题是,一般来说,当Ant将此值插入到字符串中时,它将消耗转义,因此它们消失。这是一个例外,在'propertyfile'任务中,您通常希望将转义保留在输出属性文件中 - 正如您所观察到的 - 为了能够在以后正确读取文件。

那么,该怎么办?

也许最简单的事情是确保从'source.props'中读取的属性保留它们的转义以用于以后的过滤器。因此,而不是使用

<property file="source.props"/> 

加载,使用

<loadproperties srcfile="source.props"> 
    <filterchain> 
     <replacestring from="\" to="\\" /> 
    </filterchain> 
</loadproperties> 

这应该确保你的转义序列传播。

0

我刚刚测试了以下使用Eclipse集成蚂蚁支持:

<copy file="test.props" tofile="target.props"> 
    <filterset begintoken="$" endtoken="$"> 
    <filter token="appServerDir" value="C\:\\somedir\\jboss_4_2_3"/> 
    </filterset> 
</copy> 

,并生成以下文件:

C\:\\\somedir\\\jboss_4_2_3 

蚂蚁什么版本您使用的?

+0

我正在使用ant 1.7.1。但是你的例子与我的代码略有不同,因为你直接传递值,即硬编码.-你尝试过设置一些属性,并传递值吗? – Neil 2010-07-29 08:32:16

+0

@Neil是的我试过了,输出结果是一样的:C:\\ somedir \\ jboss_4_2_3 – 2010-07-29 08:52:13

+0

@Manuel - 你用什么版本的ant? – Neil 2010-07-29 08:58:17

0

作为解决方法,您还可以使用正斜杠编写您的初始属性,如C:/somedir/jboss_4_2_3,它不应该使用转义字符。

+0

这会工作,但不幸的是我没有控制创建初始属性文件(!)的过程。谢谢。 – Neil 2010-07-29 08:58:49

1

我刚刚在Ubuntu服务器10.10上使用Apache Ant version 1.7.1 compiled on May 25 2010进行了测试,并使用了2008年6月27日在Windows XP上的Eclipse 3.6中编译的Apache Ant版本1.7.1。现在的结果(来自相同):

变量source.props:
appserver.home=C\:\\somedir\\jboss_4_2_3

回声上控制台:
[echo] C:\somedir\jboss_4_2_3

变量target.properties:
appserver.home=C:\somedir\jboss_4_2_3

编辑 - 下面的解决方案; -D

在我看来,你应该使用propertyfile,如果你阅读这个任务的手册,你可以看到它能够MANIPUlATE现有的属性文件。这一个适用于我,并保留模板中的所有评论和变量。

<copy file="template_file.props" tofile="target.props" /> 
<propertyfile file="target.props"> 
    <entry key="appserver.home" value="${appserver.home}"/> 
</propertyfile>