ANT 错误 CreateProcess 错误=2

ANT error CreateProcess error=2

当我尝试通过 ANT 调用简单的 JAR 文件时。每当我执行时,我都会收到以下错误:

C:\temp\My\My_Ant.xml:20: Execute failed: java.io.IOException: Cannot run program "C:\PROGRA~1\Java\jre7\bin\java.exe -jar C:\temp\My\javatest.jar" (in directory "C:\temp\My"): CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
    at java.lang.Runtime.exec(Runtime.java:617)
    at org.apache.tools.ant.taskdefs.launcher.Java13CommandLauncher.exec(Java13CommandLauncher.java:58)
    at org.apache.tools.ant.taskdefs.Execute.launch(Execute.java:426)
    at org.apache.tools.ant.taskdefs.Execute.execute(Execute.java:440)
    at org.apache.tools.ant.taskdefs.ExecTask.runExecute(ExecTask.java:629)
    at org.apache.tools.ant.taskdefs.ExecTask.runExec(ExecTask.java:670)
    at org.apache.tools.ant.taskdefs.ExecTask.execute(ExecTask.java:496)
    at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:293)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
    at org.apache.tools.ant.Task.perform(Task.java:348)
    at org.apache.tools.ant.Target.execute(Target.java:435)
    at org.apache.tools.ant.Target.performTasks(Target.java:456)
    at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1405)
    at org.apache.tools.ant.Project.executeTarget(Project.java:1376)
    at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
    at org.apache.tools.ant.Project.executeTargets(Project.java:1260)
    at org.apache.tools.ant.Main.runBuild(Main.java:854)
    at org.apache.tools.ant.Main.startAnt(Main.java:236)
    at org.apache.tools.ant.launch.Launcher.run(Launcher.java:285)
    at org.apache.tools.ant.launch.Launcher.main(Launcher.java:112)

原因:java.io.IOException:CreateProcess error=2,系统找不到指定的文件 在 java.lang.ProcessImpl.create(本机方法) 在 java.lang.ProcessImpl.(ProcessImpl.java:385) 在 java.lang.ProcessImpl.start(ProcessImpl.java:136) 在 java.lang.ProcessBuilder.start(ProcessBuilder.java:1028) ... 还有 24 个

Java 程序只是打印 "hello world!"

我是这样调用ANT的:

C:\Tools\ANT\apache-ant-1.9.7\bin\ant -buildfile My_Ant.xml

知道我为什么会收到这个吗?当我通过命令行 运行 时,我得到了正确的消息。

C:\temp\My>C:\PROGRA~1\Java\jre7\bin\java.exe -jar JavaTest.jar
hello from Java

编辑:

蚂蚁脚本:

<?xml version="1.0" encoding="UTF-8"?>
<project name="Issue Management" default="startActivity"  xmlns:if="ant:if" xmlns:unless="ant:unless">
    <property name="javaPath" value="C:\PROGRA~1\Java\jre7\bin\java.exe"/>
    <property name="AnalyzerPath" value="C:\temp\my"/>
    <property name="Analyzer" value="javatest.jar"/>
    <!--Setting the location of ANT Contrib starts 
    <taskdef resource="net/sf/antcontrib/antlib.xml">
         <classpath>
            <pathelement location="C:/Tools/ANT/apache-ant-1.8.2/ant-contrib-1.0b3.jar" />
         </classpath>
    </taskdef>-->
    <tstamp>
        <format property="current.time" pattern="yyyyMMdd_HHmmss" />        
    </tstamp>
    <target name="startActivity">       
        <echo>Issue Management script started at ${current.time}</echo>
        <exec executable="${javaPath} -jar ${AnalyzerPath}${Analyzer}" resultproperty="BuildErrorCode" failonerror="true" dir="${AnalyzerPath}">            
            <arg value="--help"/>
        </exec>
        <echo>Issue Management script ended at ${current.time}</echo>
    </target>       
</project>

executable参数需要设置为只是可执行文件的名称或路径;命令参数应使用嵌套的 <arg> 元素单独指定,例如:

<exec executable="${javaPath}" resultproperty="BuildErrorCode"
      failonerror="true" dir="${AnalyzerPath}">  
    <arg value="-jar" />
    <arg value="${AnalyzerPath}${Analyzer}" />       
    <arg value="--help" />
</exec>

当您将整个命令行指定为可执行文件时,它被视为带有嵌入空格的单个命令,因此未找到:

Cannot run program "C:\PROGRA~1\Java\jre7\bin\java.exe -jar C:\temp\My\javatest.jar"
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^