我在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 \"cd /cygdrive/c/dev/projects/droid/NDKTestApp && /cygdrive/c/dev/tools/droid/android-ndk-r4b/ndk-build"" />
<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
我会是第一个承认我是蚂蚁的人,所以我可能会错过一些非常明显的东西。我已经搜索过,但没有任何东西真的跳出来,我的任务似乎运行正常,只是关于命令行的一些时髦。感谢您提前提供任何帮助。
答案 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进程在被调用后总是关闭。