2016-12-20 92 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