我的命令行应用程序调用如下所示:
java -jar myapp.jar --output c:\test.txt c:\test.txt
其中读取test.txt,处理它并将结果保存到同一文件中。
我正在尝试使用它完成ant任务,但无法弄清楚如何使用相同的路径进行输入和输出。
<target name="compress">
<apply executable="java" parallel="false">
<fileset dir="c:/test/" includes="*.txt">
</fileset>
<arg line="-jar"/>
<arg path="myapp.jar"/>
<srcfile/>
<arg line="--output"/>
<mapper type="glob" from="*" to="c:/test/*"/>
<targetfile/>
</apply>
</target>
哪个不起作用。使用<mapper type="identity"/>
并将dest="c:/test/"
设置为应用任务也不起作用。看起来它只是不想重写现有文件。有没有办法让它工作而不将输出写入分离的文件夹,然后从原始文件夹中删除所有文件并将文件复制回原始文件夹?
感谢。
答案 0 :(得分:8)
首先,您应该使用<arg value="..."/>
而不是<arg line="..."/>
。后者不适用于多个参数和should be avoided in general。
其次,apply任务将目标文件与源文件进行比较,如果两者相同(或者如果目标文件比源文件新,这在您的情况下显然不适用),则不会被调用。您可以使用force="true"
属性来避免这种情况。
以下适用于我:
<target name="compress">
<apply executable="java" parallel="false" dest="c:/test/" force="true">
<fileset dir="c:/test/" includes="*.txt" />
<arg value="-jar"/>
<arg path="myapp.jar"/>
<srcfile/>
<arg value="--output"/>
<mapper type="identity"/>
<targetfile/>
</apply>
</target>
您可以在详细模式下运行Ant(使用“-v”开关)来查看此任务正在生成的实际命令行。
答案 1 :(得分:0)
如果文件存在,我建议先使用ant删除文件 然后创建新文件。