2016-12-20 93 views
1

当我尝试通过ANT调用简单的JAR文件时。每当我执行我得到以下错误:ANT错误CreateProcess错误= 2

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的错误= 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 

编辑:

Ant脚本的:

<?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> 
+0

您可以添加与错误相关的构建文件片段吗? –

+0

@martinclayton已添加。感谢您的时间 – KK99

回答

1

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" 
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
+0

,这实际上是有道理的。谢谢。但是,按照您的建议更改后,我会得到以下'[exec]错误:无法创建Java虚拟机。 [exec]错误:发生了致命异常。程序将会退出。 [exec]无法识别的选项:-jar C:\ temp \ My \ javatest.jar' – KK99

+0

看起来您需要进一步将“-jar”和“$ {AnalyzerPath} \ $ {Analyzer}”分隔为不同的参数。 –

+0

谢谢!有用 :) – KK99