Java Ant:如何设置允许文件覆盖的"应用"任务?

ser*_*erg 1 java ant

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

java -jar myapp.jar --output c:\test.txt c:\test.txt
Run Code Online (Sandbox Code Playgroud)

其中读取test.txt,处理它并将结果保存到同一文件中.

我试图从它做出蚂蚁任务,但无法弄清楚如何使它使用相同的输入和输出路径.

    <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>
Run Code Online (Sandbox Code Playgroud)

哪个不起作用.使用<mapper type="identity"/>和设置dest="c:/test/"应用任务也不起作用.看起来它只是不想重写现有文件.有没有办法让它工作而不将输出写入分离的文件夹,然后删除原始文件夹中的所有文件并将文件复制回原始文件夹?

谢谢.

Chs*_*y76 8

首先,你应该使用<arg value="..."/>而不是<arg line="..."/>.后者不适用于多个论点,一般应该避免.

其次,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>
Run Code Online (Sandbox Code Playgroud)

您可以在详细模式下运行Ant(使用"-v"开关)来查看此任务正在生成的实际命令行.

  • + -v开关的+1已搜索文档以申请调试命令,但没想到这个:) (2认同)