2013-10-03 146 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