Проблемы с запуском Bash.exe из Ant Buildfile в Eclipse - PullRequest
2 голосов
/ 25 ноября 2010

Я создал Ant-файл сборки и связанный Ant-компоновщик в моем проекте Eclipse. Строитель работает правильно, но я не могу передать правильную информацию bash. Я использую Cygwin на компьютере с XP Professional SP3. Я знаю, что команда работает, и проверил ее с терминала 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 ]

2 голосов
/ 25 ноября 2010

Непосредственная проблема заключается в том, что свойство ${cmdline} передается в bash в качестве единственного аргумента - отсюда и очень длинный недопустимый параметр.

Вместо этого вы можете передать команду как arg line:

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

Или, возможно, разбить его на отдельные value с.Обратите внимание, что в этом случае вам не нужны кавычки вокруг аргумента -c:

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

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

Подробнее здесь .

1 голос
/ 12 января 2011

Вы по-прежнему можете использовать формат в своем первоначальном сообщении, просто немного измените кавычки, например так:

<!-- 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, чтобы процесс cygin bash всегда был закрыт после вызова.

...