2010-11-25 70 views
2

J'ai créé un fichier de construction Ant et un générateur Ant associé dans mon projet Eclipse. Le générateur s'exécute correctement mais je n'arrive pas à transmettre les informations correctes à bash. Je cours cygwin sur une machine XP Professional SP3. Je sais que la commande fonctionne et l'a vérifiée à partir d'un terminal cygwin. J'ai créé un générateur personnalisé plus tôt avec cette commande, donc je sais aussi que cela fonctionne à partir d'Eclipse.Problème lors de l'exécution de Bash.exe à partir d'un fichier Build Ant dans Eclipse

Voici ma version 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> 

La tâche passe bien, mais la sortie I indique que les paramètres de ligne de commande sont incorrectes. Même s'ils sont listés exactement comme ils devraient l'être (et vérifiés en s'exécutant à partir de l'invite cmd ainsi que du constructeur personnalisé mentionné précédemment).

Voici la partie pertinente du message d'erreur (le reste vomit tout l'aide et est sans pertinence pour cette question):

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 

Je serai le premier à admettre que je suis une fourmi noob alors je rate probablement quelque chose de très évident. J'ai cherché mais rien ne me saute vraiment aux yeux et la tâche semble fonctionner correctement, juste quelque chose de génial à propos de la ligne de commande. Merci d'avance pour toute aide.

Répondre

2

Le problème immédiat est que la propriété ${cmdline} est passée à bash en tant qu'argument unique, d'où la très longue 'option non valide'.

Vous pouvez passer la commande en tant arg line place:

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

Ou peut-être diviser en value séparés s. Notez que vous n'avez pas besoin quots autour du -c arg dans ce cas:

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

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

Plus here.

+0

C'était tout! Merci beaucoup. Je marque comme réponse. – Soshimo

1

Vous pouvez toujours utiliser le format dans votre post initial, il suffit de changer vos citations un peu, comme ceci:

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

Notez l'utilisation de « » pour désigner la chaîne XML, mais « » pour désigner les lignes de commande passées à cygwin/bash. De plus, en utilisant ce script dans mon android builder (script ant fortement personnalisé avec un prétraitement de source étendu), j'ai rencontré des problèmes où la construction de la fourmi était "déjà en cours". À cette fin, j'ai ajouté une commande de sortie à la fin du script bash, de sorte que le processus de bascule cygin est toujours fermé après avoir été appelé.