2013-10-03 145 views
2

我創建了一個Ant構建我的科爾多瓦項目如下:Ant構建執行科爾多瓦

<project default="build"> 
    <target name="init-android"> 
     <exec executable="cordova"> 
      <arg value="platform"/> 
      <arg value="add"/> 
      <arg value="android"/> 
     </exec> 
     <exec executable="cordova"> 
      <arg value="build"/> 
     </exec> 
    </target> 
</project> 

但我得到這個錯誤:

C:\path_to_project\build.xml:3: Execute failed: java.io.IOException: Cannot run program "cordova": CreateProcess error=2, The system cannot find the file specified at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) at java.lang.Runtime.exec(Runtime.java:615) at org.apache.tools.ant.taskdefs.launcher.Java13CommandLauncher.exec(Jav a13CommandLauncher.java:41)

我可以從命令沒有問題的運行科爾多瓦命令提示,我有:

JAVA_HOME = C:/Program Files/Java/jdk1.7.0_10/ ANT_HOME = C:\Program Files\Java\apache-ant-1.9.2 NODEJS_HOME = C:\Program Files\nodejs

他們都在我的道路上。我不明白爲什麼它不起作用。請幫忙。謝謝

回答

3

通常,當使用Java應用程序在Windows中啓動程序時,我經常必須執行cmd.exe並將它傳遞給我實際想要運行的程序的完整路徑。這允許系統環境變量等以您期望的方式進行設置。試試這個:

<project default="build"> 
    <target name="init-android"> 
     <exec executable="cmd.exe"> 
      <arg value="/C"/> 
      <arg value="cordova"/> 
      <arg value="platform"/> 
      <arg value="add"/> 
      <arg value="android"/> 
     </exec> 
     <exec executable="cmd.exe"> 
      <arg value="/C"/> 
      <arg value="cordova"/> 
      <arg value="build"/> 
     </exec> 
    </target> 
</project> 

如果仍然無法使用,請給出cordova的完整路徑。如果你有一個定義的話,環境變量應該可以工作。

+0

謝謝。它的工作原理,但爲什麼我的代碼不起作用?我的道路一定是錯的嗎? – Duc

+0

我不能再回想起問題的根源,但由於某些原因,環境屬性不會按照您期望的方式傳遞。但是,調用'cmd.exe'會導致所有的環境屬性都被加載,並且您將會進入比賽。 – joescii

+0

用於跨平臺兼容性 - 添加osfamily屬性 Stevko