2010-11-25 89 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進程在被調用後總是關閉。