Java 无法执行<;顺序的>;蚂蚁任务
自从我将Java从JDK7u55更新为JDK7u60以来,我在运行构建时遇到了一个问题。我正在Windows Server 2003标准版上使用Ant 1.6.5。下面是导致问题的Ant任务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
<!-- 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中:-)