Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ant中写出文件路径属性的问题_Java_Ant - Fatal编程技术网

Java 在ant中写出文件路径属性的问题

Java 在ant中写出文件路径属性的问题,java,ant,Java,Ant,我在将保存目录路径值的属性写入属性文件时遇到问题 我的脚本最初使用从一个props文件读取这个特定属性,称之为“appserver.home”。我回显了输入的值,它正确地读取为C:\\somedir\\jboss\u 4\u 2\u 3 我的脚本接下来需要做的是将该值提供给另一个属性文件(由另一个ant脚本使用-尽管这并不重要)。要创建另一个文件,我将使用一个带有由$....$包围的占位符的分类模板文件,使用以下命令在正确的位置插入正确的值:- <copy file="template_

我在将保存目录路径值的属性写入属性文件时遇到问题

我的脚本最初使用
从一个props文件读取这个特定属性,称之为“appserver.home”。我回显了输入的值,它正确地读取为C:\\somedir\\jboss\u 4\u 2\u 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\u 4\u 2\u 3,即它丢失了转义字符。当下一个ant脚本使用此文件时,它将属性值解释为C:somedirjboss_4_2_3

那么问题是我如何告诉ant我正在写的值是一个文件路径? 注意:我尝试了以下方法,但实际上效果很好:-

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

。。ie将名称输出为c\:\\somedir\\jboss4\u 2\u 3,但我不想使用此技术,而是使用模板文件技术,因为它包含一些始终是静态的属性以及注释等


提前感谢

我刚刚使用Eclipse集成的ant支持测试了以下内容:

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

您使用的ant版本是什么?

作为一种解决方法,您还可以使用前斜杠编写初始属性,如
C:/somedir/jboss_4_2_3
,它不需要转义字符。

在处理转义方面,任务之间可能存在一些令人困惑的差异

当您说“appserver.home”正确回音时,我猜您使用的是“echoproperties”任务,它显示存储的值而不插入转义。这显示了与“source.props”文件中相同的转义次数

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

那么,该怎么办

也许最简单的事情是确保从“source.props”读取的属性保留其转义,以便在以后的过滤器中使用。因此,与其使用

<property file="source.props"/>

要加载,请使用

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


这将确保转义序列的传播。

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

source.props中的变量:
appserver.home=C\:\\somedir\\jboss\u 4\u 2\u 3

控制台上的回声:
[echo]C:\somedir\jboss\u 4\u 2\u 3

target.properties中的变量:
appserver.home=C:\somedir\jboss\u 4\u 2\u 3

编辑以下解决方案-D

我认为您应该使用属性文件,如果您阅读此任务的手册,您可以看到它能够操作现有的属性文件。这一个对我有效,模板中的所有注释和变量都被保留

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


我正在使用ant 1.7.1。但是您的示例与我的示例略有不同,因为您直接输入的值是硬编码的。-您是否尝试过设置某个属性,然后输入该属性的值?@Neil是的,我尝试过,结果是相同的:C\:\\somedir\\jboss\u 4\u 2_3@Manuel-您在Eclipse中使用的ant版本是什么?@Neil${ant.version}打印:ApacheAnt版本1.7.1于6月27日编译2008@Manuel-谢谢你的帮忙。但是-对于Ant版本,我得到了与您相同的精确输出,但行为不同。当我这样做并将其传递到filterset时,它仍然写为C:\somedir\jboss_4_2_3-这对于我的要求是错误的,因为我不想丢失转义字符。我想唯一的区别是,听起来您使用的是eclipse,而我使用的是命令提示符。您自己尝试过这样做吗?这样可以,但不幸的是,我无法控制创建初始属性文件(!)的过程。谢谢
<copy file="template_file.props"  tofile="target.props" />
<propertyfile  file="target.props">
    <entry  key="appserver.home" value="${appserver.home}"/>
</propertyfile>