2010-11-25 92 views
2

我在我的Eclipse项目中创建了一个Ant构建文件和一个关联的Ant构建器。构建器正在正确执行,但我似乎无法将正确的信息传递给bash。我正在XP Professional SP3机器上运行cygwin。我知道这个命令有效,并且已经从cygwin终端验证过它。我之前用这个命令创建了一个自定义构建器,所以我也知道它可以在Eclipse中使用。在Eclipse中从Ant构建文件执行Bash.exe时出错

这里是我的构建XML:

<?xml version="1.0" encoding="UTF-8"?> 
    <project name="BlazeLibrary.makejar" default="makejar" basedir="."> 
    <property name="bash" location="e:\cygwin\bin\bash.exe" /> 
    <property name="workingdir" location="e:\cygwin\bin" /> 
    <property name="cmdline" value="--login -c \&quot;cd /cygdrive/c/dev/projects/droid/NDKTestApp &amp;&amp; /cygdrive/c/dev/tools/droid/android-ndk-r4b/ndk-build&quot;" /> 
    <target name="nativeBuild" description="Build the native binaries using the Android NDK"> 
     <exec dir="${workingdir}" executable="${bash}"> 
      <arg value="${cmdline}" /> 
     </exec> 
    </target> 
    </project> 

任务运行正常,但输出I表示的命令行参数不正确。尽管它们的排列方式与它们应该完全一样(并且通过从cmd提示符以及前面提到的自定义构建器运行来验证)。

以下是错误消息的相关部分(其余只是呕吐的帮助和不相关的这个问题):

nativeBuild: 
[exec] /usr/bin/bash: --login -c "cd /cygdrive/c/dev/projects/droid/NDKTestApp && /cygdrive/c/dev/tools/droid/android-ndk-r4b/ndk-build": invalid option 
[exec] Usage: /usr/bin/bash [GNU long option] [option] ... blah blah blah 

我会是第一个承认我是一个Ant noob所以我可能错过了一些非常明显的东西。我已经搜索过,但是没有任何东西真正跳出来,而且任务似乎正常运行,只是关于命令行的一些东西。感谢您提前提供任何帮助。

回答

2

直接的问题是${cmdline}属性被传递给bash作为单个参数 - 因此很长的'无效选项'。

你可以通过命令为arg line,而不是:

<exec dir="${workingdir}" executable="${bash}"> 
    <arg line="${cmdline}" /> 
</exec> 

也许把它分解成独立的value秒。请注意,您不需要绕-c ARG的quots在这种情况下:

<property name="cmdline" value="cd /cygdrive/ ..etc.. ndk-build" /> 

<exec dir="${workingdir}" executable="${bash}"> 
    <arg value="--login" /> 
    <arg value="-c" /> 
    <arg value="${cmdline}" /> 
</exec> 

更多here

+0

就是这样!非常感谢。我正在回答。 – Soshimo 2010-11-25 18:46:54

1

你仍然可以使用的格式在您最初的帖子,只需改变你的报价张望了一下,像这样:

<!-- These properties hold the location of the android-ndk, for us to build our antive libs --> 
<property name="bash" location="c:\cygwin\bin\bash.exe" /> 
<property name="workingdir" location="c:\cygwin\bin" /> 
<property name="cmdline" value="--login -c 'cd /path/to/project/files;/path/to/ndk_build/ndk-build;exit'" /> 
<target name="NDKBUILD" description="Build the native binaries using the Android NDK"> 
    <exec dir="${workingdir}" executable="${bash}"> 
     <arg line="${cmdline}" /> 
    </exec> 
</target> 

注“”来表示XML字符串,但“”来表示使用命令行传递给cygwin/bash。

此外,当我的android builder中使用这个脚本(大量自定义的蚂蚁脚本与广泛的源预处理)时,我遇到了蚂蚁构建“已经进行中”的问题。

为此,我在bash脚本的末尾添加了一个exit命令,所以cygin bash进程在被调用后总是关闭。