从Eclipse中的Ant构建文件执行Bash.exe时遇到问题

时间:2010-11-25 18:26:36

标签: java eclipse ant cygwin

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

这是我的构建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

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

2 个答案:

答案 0 :(得分:2)

当前的问题是${cmdline}属性作为单个参数传递给bash - 因此是非常长的'无效选项'。

您可以将命令改为arg line

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

或者可能将其分解为单独的value。请注意,在这种情况下,您不需要-c arg周围的小数:

<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

答案 1 :(得分: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构建器中使用此脚本时(大量定制的ant脚本具有广泛的源预处理),我遇到了ant构建“已在进行中”的问题。

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