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 无法执行<;顺序的>;蚂蚁任务_Java_Ant_Java 7 - Fatal编程技术网

Java 无法执行<;顺序的>;蚂蚁任务

Java 无法执行<;顺序的>;蚂蚁任务,java,ant,java-7,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> <mov

自从我将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使用单独的线程来运行每个测试。有些测试需要更长的时间才能完成,有些测试实际上没有响应。我曾经使用ProcessExplorer手动杀死它们。完成后,它将用于执行下一个命令,该命令将jar重新命名为其原始名称。当我使用JDK7u55时,它曾经工作过

现在,由于我将Java升级到JDK7u60,所以不再等待所有测试完成,而是尝试最后两个
命令。这会导致生成失败,因为测试类正在使用底层JAR文件,所以无法继续。我得到以下错误:

构建失败

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


我想知道JDK7u60中发生了什么变化导致了这种行为。我查看了JDK7u60的发行说明,但没有得到任何信息。有人能解释一下吗?

首先,在windows上,属于另一个进程或线程的文件防止删除文件并不少见

其次,在你的蚂蚁目标中,顺序任务的目的到底是什么?任务描述如下:

Sequential是一个容器任务,它可以包含其他ApacheAnt 任务。嵌套的任务只是按顺序执行。顺序的 主要用途是支持对一个子集的顺序执行 并行任务中的任务

在你的情况下,没有用


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

您的jar App.jar是否正在被其他进程使用?build.xml中的第579行是什么?第579行是最后一个命令。正如我所说,在执行第579行之前,它不会等待所有测试完成,测试正在使用jar。这难道不是答案吗?我已经在问题中写道,它适用于早期版本的Java。当我升级Java时,它不起作用。我需要按顺序执行这些任务。我应该把任务放进电脑里。但即使这样做了,我也会犯同样的错误。是的,我理解测试类在尝试使用jar时会使用jar的原因,但是为什么JDK7u55的行为不一样呢?这是令人惊讶的。@Paraj我猜它在通过线程处理文件方面有一些区别,这些区别深藏在JVM中:-)