Question Comment puis-je obtenir la valeur de retour d'un exec?


<target name="CheckState">
     <exec executable="${App.path}"/>
</target>

Dans cette tâche, l'exécutable retournera une valeur qui indiquera l'état de mon application. Comment pourrais-je obtenir la valeur renvoyée dans le fichier de compilation Ant. Je vais utiliser cette valeur pour déterminer un comportement.


19
2017-12-03 09:31


origine


Réponses:


Utilisez le resultproperty et failonerror attributs du exec tâche, par exemple:

<target name="CheckState">
     <exec executable="${App.path}"
           resultproperty="App.state"
           failonerror="false"/>
     <echo message="App state was: ${App.state}" />
</target>

Citant du exec documents de tâche Erreurs et codes retour:

Par défaut le code retour d'un exec   est ignoré; quand vous définissez   failonerror = "true" alors tout retour   échec de la signalisation du code (spécifique au système d'exploitation)   provoque la construction échoue.   Alternativement, vous pouvez définir   résultatpropriété au nom d'un   la propriété et l'avoir assigné à la   code de résultat (sauf immutabilité, de   cours).

Si la tentative de démarrer le programme   échoue avec un code d'erreur dépendant du système d'exploitation,   arrête alors la construction à moins que   failifexecutionfails est défini sur false.   Vous pouvez l'utiliser pour exécuter un programme si   il existe, mais ne fait rien autrement.

Que signifient ces codes d'erreur? Bien,   ils dépendent du système d'exploitation. Sous Windows   boîtes que vous devez regarder le   Documentation; le code d'erreur 2 signifie «non   tel programme », ce qui signifie généralement   n'est pas sur le chemin. Chaque fois que vous voyez   une telle erreur de toute tâche Ant, c'est   généralement pas un bug Ant, mais certains   problème de configuration sur votre machine.


29
2017-12-03 09:36



Voici un moyen générique de vérifier le résultat et d'afficher la sortie de l'exécution seulement si le processus retourne un code d'échec.

<property
    name="my.project.tmp.exec.output"
    value="${tmp.dir}/exec-output.txt"/>

<target
    name="my.project.my.task">
    <exec
        executable="${App.path}"
        output="${my.project.tmp.exec.output}"
        resultproperty="my.project.my.task.result"
        failonerror="false"/>
    <loadfile
        srcfile="${my.project.tmp.exec.output}"
        property="my.project.my.task.output"
    />
    <fail message="ERROR: ${my.project.my.task.output}">
        <condition>
            <not>
                <equals arg1="${my.project.my.task.result}" arg2="0"/>
            </not>
        </condition>
    </fail>
    <delete file="${my.project.tmp.exec.output}"/>
</target>

6
2017-12-04 13:02