Java Ant : How to setup "apply" task with allowing file overwriting?

标签 java ant

我的命令行应用程序调用如下所示:

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/"应用任务也不起作用。看起来它只是不想重写现有文件。有没有一种方法可以在不将输出写入单独的文件夹,然后从原始文件夹中删除所有文件并将文件复制回原始文件夹的情况下使其工作?

谢谢。

最佳答案

首先,您应该使用 <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”开关)以查看此任务生成的实际命令行。

关于Java Ant : How to setup "apply" task with allowing file overwriting?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1718760/

相关文章:

java - 按值对java映射进行排序(包含一个集合)

java - Collectors#toList 的运行时复杂性

java - 在单独的行上使用 toString() 方法返回 Java 中集合的元素

java - 在 Ant 中,如何指定文件名中带有逗号的文件?

java - Ant 在前台使用 CMD 启动 Java

java - 使用 Dropzone.js 在 Struts2 中上传多个文件

java - 递归java方法解析带条件的字符串?

eclipse - 如何在 eclipse ant 编辑器中启用撤消?

java - build.xml ANT 构建中类路径的相对路径

java - 将属性附加到 JAR 的 manifest.mf