2010-11-25 3 views
2

Eclipse 프로젝트에서 Ant 빌드 파일과 관련 Ant 빌더를 작성했습니다. 빌더가 올바르게 실행되고 있지만 올바른 정보를 bash에 전달할 수 없습니다. XP Professional SP3 시스템에서 cygwin을 실행 중입니다. 명령이 작동하고 cygwin 터미널에서이를 확인했습니다. 이 커맨드를 가지고 커스텀 빌더를 생성 했으므로 이클립스에서 작동한다는 것도 알고 있습니다.Eclipse의 Ant 빌드 파일에서 Bash.exe를 실행하는 데 문제가 발생했습니다.

<?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> 

작업이 잘 실행되지만 출력은 내가 명령 줄 매개 변수가 잘못 있음을 나타냅니다 :

여기 내 빌드 XML이다. 비록 그들이 정확히 나열되어 있고 (앞서 언급 한 커스텀 빌더뿐만 아니라 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 

가 나는 개미임을 인정하는 첫 번째 수 있습니다 noob 그래서 나는 아마 아주 명백한 무엇인가 놓치고있다. 나는 수색했지만 아무 것도 실제로 나에게 뛰어 오르지 않으며 작업이 제대로 실행되는 것처럼 보입니다. 명령 행에 대해서는 펑키 한 것입니다. 사전에 도움을 주셔서 감사합니다.

답변

2

즉각적인 문제는 ${cmdline} 속성이 단일 인수로 bash에 전달된다는 것입니다. 따라서 매우 긴 '잘못된 옵션'입니다.

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

을 아니면 별도의 value들로 그것을 깰 :

당신은 대신 arg line으로 명령을 전달할 수 있습니다. 당신이이 경우에 -c 인수 주위 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.

<!-- 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 문자열을 표시하지만,하는 ""의 사용을 :

+0

그게 전부 였어! 정말 고맙습니다. 나는 대답했다. – Soshimo

1

당신은 여전히 ​​같은, 약간의 주위에 당신의 따옴표를 변경, 초기 게시물에 형식을 사용할 수 있습니다 cygwin/bash에 전달 된 명령 행.

또한이 스크립트를 내 안드로이드 빌더 (광범위한 소스 전처리로 커스터마이징 된 개미 스크립트)에서 사용할 때 앤트 빌드가 "이미 진행 중"인 문제가 발생했습니다.

이 목적을 위해 종료 명령을 bash 스크립트의 끝에 추가 했으므로 cygin bash 프로세스는 호출 된 후에 항상 닫힙니다.

관련 문제