无法使用Ant </sequential>执行<sequential>任务

时间:2015-01-06 08:37:00

标签: java ant java-7

由于我将Java从JDK7u55更新为JDK7u60,因此在运行构建时遇到问题。我在Windows Server 2003标准版上使用Ant 1.6.5。下面是导致问题的Ant任务。

<!-- RUN JUNIT TASK -->
<target name="run_junit" description="Runs all JUnit tests in another JVM">
    <sequential>
            <move file="${MyProject}\bin\myApp.jar" tofile="${MyProject}\bin\myApp_original.jar"/>
            <move file="${MyProject}\bin\myApp_test.jar" tofile="${MyProject}\bin\myApp.jar"/>

            <exec executable="WinTail" spawn="true">
                <arg value="${MyProject}\junit.log"/>
            </exec>

            <java classname="myProject.test.AllTests"
                maxmemory="256m"
                fork="true"
                output="${MyProject}\junit.log"
                dir="${MyProject}\bin"
                append="true">
            <jvmarg value="-Djdk.lang.Process.allowAmbigousCommands=true"/>
            <arg value="${MyProject}\bin"/>
            <classpath>
                <fileset dir="${MyProject}\bin">
                    <include name="myApp.jar"/>
                </fileset>
                <pathelement path="${MyProject}\bin"/>
            </classpath>
            </java>

            <move file="${MyProject}\bin\myApp.jar" tofile="${MyProject}\bin\myApp_test.jar"/>
            <move file="${MyProject}\bin\myApp_original.jar" tofile="${MyProject}\bin\myApp.jar"/>
    </sequential>
</target>

重命名两个JAR后,我开始使用<java>任务运行所有测试。 AllTests.java使用单独的线程来运行每个测试。有些测试需要更长的时间才能完成,有些测试实际上没有做出反应。我曾经使用ProcessExplorer手动杀死它们。完成后,它用于执行下一个命令,该命令将JAR重命名为其原始名称。它曾经在我使用JDK7u55时工作。

现在,因为我将Java升级到JDK7u60,而不是等待所有测试完成,所以尝试了最后两个<move>命令。这导致构建失败,因为<move> caanot正在进行,因为测试类正在使用基础JAR文件。我得到以下错误:

  

建立失败

     

C:\ MyProject \ build.xml:579:无法删除文件C:\ MyProject \ bin \ myApp.jar

我想知道JDK7u60中发生了什么变化导致了这种行为。我检查了JDK7u60的发行说明,但没有得到任何结果。有人可以对此有所了解吗?

1 个答案:

答案 0 :(得分:0)

首先在Windows上,属于另一个进程或线程的文件阻止删除文件的情况并不少见。

其次,ANT目标中顺序任务的目的究竟是什么? documentation描述了以下任务:

  

Sequential是一个容器任务 - 它可以包含其他Apache Ant   任务。嵌套任务只是按顺序执行。顺序&#39; S   主要用途是支持顺序执行子集   并行任务中的任务

在您的情况下,没有使用parallel ...

为什么不尝试删除顺序任务,看看是否能解决问题。