web-dev-qa-db-fra.com

Comment exécuter Ant en ligne de commande

J'ai un fichier de construction Ant et j'essaie de l'exécuter dans la ligne de commande avec la commande suivante:

$ C:\Program Files (x86)\.....>ant -f C:\Silk4J\Automation\iControlSilk4J\build.xml

Mais rien ne se passe et le résultat est:

BUILD SUCCESSFUL
Total time: 0 seconds

Ma variable d'environnement est correcte .
Quel est le problème? Voici mon fichier de construction:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- WARNING: Eclipse auto-generated file.
              Any modifications will be overwritten.
              To include a user specific buildfile here, simply create one in the same
              directory with the processing instruction <?eclipse.ant.import?>
              as the first entry and export the buildfile again. -->
<project basedir="." default="build" name="iControlSilk4J">
    <property environment="env"/>
    <property name="Eclipse_HOME" value="../../../Program Files (x86)/Silk/SilkTest/Eclipse"/>
    <property name="junit.output.dir" value="junit"/>
    <property name="debuglevel" value="source,lines,vars"/>
    <property name="target" value="1.6"/>
    <property name="source" value="1.6"/>
    <path id="Silk Test JTF 13.5.0 Library.libraryclasspath">
        <pathelement location="../../../Program Files (x86)/Silk/SilkTest/ng/JTF/silktest-jtf-nodeps.jar"/>
    </path>
    <path id="JUnit 4.libraryclasspath">
        <pathelement location="${Eclipse_HOME}/plugins/org.junit_4.8.2.v4_8_2_v20110321-1705/junit.jar"/>
        <pathelement location="${Eclipse_HOME}/plugins/org.hamcrest.core_1.1.0.v20090501071000.jar"/>
    </path>
    <path id="iControlSilk4J.classpath">
        <pathelement location="bin"/>
        <pathelement location="lib/Apache-log4j.jar"/>
        <pathelement location="lib/commons-io-2.4.jar"/>
        <pathelement location="lib/commons-lang3-3.1.jar"/>
        <pathelement location="lib/junit.jar"/>
        <pathelement location="lib/org.hamcrest.core_1.1.0.v20090501071000.jar"/>
        <pathelement location="lib/silktest-jtf-nodeps.jar"/>
        <path refid="Silk Test JTF 13.5.0 Library.libraryclasspath"/>
        <path refid="JUnit 4.libraryclasspath"/>
        <pathelement location="../../../Users/Admin/Desktop/Java-mail-1.4.4.jar"/>
        <pathelement location="../../../Users/Admin/Desktop/javax.activation.jar"/>
        <pathelement location="lib/joda-time-2.3.jar"/>
    </path>
    <target name="init">
        <mkdir dir="bin"/>
        <copy includeemptydirs="false" todir="bin">
            <fileset dir="src">
                <exclude name="**/*.Java"/>
            </fileset>
        </copy>
    </target>
    <target name="clean">
        <delete dir="bin"/>
    </target>
    <target depends="clean" name="cleanall"/>
    <target depends="build-subprojects,build-project" name="build"/>
    <target name="build-subprojects"/>
    <target depends="init" name="build-project">
        <echo message="${ant.project.name}: ${ant.file}"/>
        <javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}">
            <src path="src"/>
            <classpath refid="iControlSilk4J.classpath"/>
        </javac>
    </target>
    <target description="Build all projects which reference this project. Useful to propagate changes." name="build-refprojects"/>
    <target description="copy Eclipse compiler jars to ant lib directory" name="init-Eclipse-compiler">
        <copy todir="${ant.library.dir}">
            <fileset dir="${Eclipse_HOME}/plugins" includes="org.Eclipse.jdt.core_*.jar"/>
        </copy>
        <unzip dest="${ant.library.dir}">
            <patternset includes="jdtCompilerAdapter.jar"/>
            <fileset dir="${Eclipse_HOME}/plugins" includes="org.Eclipse.jdt.core_*.jar"/>
        </unzip>
    </target>
    <target description="compile project with Eclipse compiler" name="build-Eclipse-compiler">
        <property name="build.compiler" value="org.Eclipse.jdt.core.JDTCompilerAdapter"/>
        <antcall target="build"/>

...
11
Guylene Emond

Allez sur le site Web de Ant et télécharger . De cette façon, vous avez une copie de Ant outside of Eclipse. Je recommande de le mettre dans le répertoire C:\ant. De cette façon, il n'y a pas d'espaces dans les noms de répertoires. Dans le Panneau de configuration de votre système, définissez la variable d'environnement ANT_HOME dans ce répertoire, puis ajoutez-la à la variable System PATHvariable, %ANT_HOME%\bin. De cette façon, vous n'avez pas à mettre le nom du répertoire complet.

En supposant que vous ayez fait ce qui précède, essayez ceci:

C:\> cd \Silk4J\Automation\iControlSilk4J
C:\Silk4J\Automation\iControlSilk4J> ant -d build

Cela fera plusieurs choses:

  • Cela éliminera la possibilité que le problème vienne de la version Ant du logiciel Eclipe.
  • Il est beaucoup plus facile de taper
  • Puisque vous exécutez le build.xml dans le répertoire où il existe, vous ne risquez pas que votre construction Ant ne parvienne pas à localiser un répertoire particulier.

Le -d imprimera beaucoup de résultats, vous pouvez donc les capturer, ou définir votre mémoire tampon de terminal à quelque chose comme 99999, puis exécuter cls en premier pour vider le tampon. De cette façon, vous capturez toutes les sorties depuis le début dans la mémoire tampon du terminal.

Voyons comment Ant devrait être en train de s'exécuter. Vous n'avez spécifié aucune cible à exécuter, donc Ant devrait utiliser la cible par défaut build. C'est ici:

<target depends="build-subprojects,build-project" name="build"/>

La cible build ne fait rien elle-même. Cependant, dépend de deux autres cibles, elles seront donc appelées en premier:

La première cible est build-subprojects:

<target name="build-subprojects"/>

Cela ne fait rien du tout. Il n'a même pas de dépendance.

La prochaine cible spécifiée est build-project possède le code suivant:

<target depends="init" name="build-project">

Cette cible contient des tâches, et certaines cibles dépendantes. Avant que build-project ne soit exécuté, la cible init sera d'abord exécutée:

<target name="init">
    <mkdir dir="bin"/>
    <copy includeemptydirs="false" todir="bin">
        <fileset dir="src">
            <exclude name="**/*.Java"/>
        </fileset>
    </copy>
</target>

Cette cible crée un répertoire appelé bin, puis copie tous les fichiers de l’arborescence src avec le suffixe *.Java dans le répertoire bin. includeemptydirs signifie que les répertoires sans code non Java ne seront pas créés.

Ant utilise un schéma pour effectuer un travail minimal. Par exemple, si le répertoire bin est créé, la tâche <mkdir/> n'est pas exécutée. De même, si un fichier a déjà été copié ou s'il n'y a aucun fichier non Java dans votre arborescence de répertoires src, la tâche <copy/> ne s'exécutera pas. Cependant, la cible init sera toujours exécutée.

Ensuite, nous revenons à notre précédent objectif build-project:

<target depends="init" name="build-project">
    <echo message="${ant.project.name}: ${ant.file}"/>
    <javac debug="true" debuglevel="${debuglevel}" destdir="bin" source="${source}" target="${target}">
        <src path="src"/>
        <classpath refid="iControlSilk4J.classpath"/>
    </javac>
</target>

Regardez cette ligne:

<echo message="${ant.project.name}: ${ant.file}"/>

Cela aurait toujours dû être exécuté. Votre sortie a-t-elle été imprimée:

[echo] iControlSilk4J: C:\Silk4J\Automation\iControlSilk4J\build.xml

Peut-être que vous n'avez pas réalisé que cela venait de votre construction.

Après cela, il exécute la tâche <javac/>. C'est-à-dire s'il y a des fichiers à compiler. Encore une fois, Ant essaie d'éviter le travail qu'il n'a pas à faire. Si tous les fichiers *.Java ont déjà été compilés, la tâche <javac/> ne sera pas exécutée.

Et c'est la fin de la construction. Votre build n’a peut-être rien fait, simplement parce qu’il n’y avait rien à faire. Vous pouvez essayer d'exécuter la tâche clean, puis build:

C:\Silk4J\Automation\iControlSilk4J> ant -d clean build

Cependant, Ant affiche généralement la cible en cours d'exécution. Vous devriez avoir vu ceci:

init:

build-subprojects:

build-projects:

    [echo] iControlSilk4J: C:\Silk4J\Automation\iControlSilk4J\build.xml

build:

Build Successful

Notez que les cibles sont toutes imprimées dans l'ordre de leur exécution et que les tâches sont imprimées au fur et à mesure de leur exécution. Cependant, s'il n'y a rien à compiler, ni rien à copier, ces tâches ne seront pas exécutées. Est-ce que cela ressemble à votre sortie? Si c'est le cas, il se pourrait qu'il n'y ait rien à faire.

  • Si le répertoire bin existe déjà, <mkdir/> ne sera pas exécuté.
  • S'il n'y a pas de fichiers non Java dans src ou s'ils ont déjà été copiés dans bin, la tâche <copy/> ne s'exécutera pas.
  • S'il n'y a aucun fichier Java dans votre répertoire src ou s'ils ont déjà été compilés, la tâche <Java/> ne s'exécutera pas.

Si vous examinez le résultat du débogage -d, vous verrez que Ant examine une tâche, puis explique pourquoi une tâche particulière n'a pas été exécutée. De plus, l'option de débogage expliquera comment Ant décide quelles tâches exécuter.

Voyez si cela aide.

20
David W.

Essayez d’exécuter chaque cible individuellement pour vérifier que toutes fonctionnent correctement.

lance le nom de la cible pour exécuter une cible individuellement

par exemple. projet de construction de fourmis

Aussi, la cible par défaut que vous avez spécifiée est 

projet basedir = "." default = "build" name = "iControlSilk4J"

Ceci n'exécutera que les sous-projets de construction, le projet de construction et init

0
Naren

est-il toujours d'actualité?

Comme je peux le voir, vous avez écrit <target depends="build-subprojects,build-project" name="build"/>, puis vous avez écrit <target name="build-subprojects"/> (cela ne fait rien). Serait-ce une raison? Est-ce que ce <echo message="${ant.project.name}: ${ant.file}"/> imprime le message approprié? Si non, la cible n'est pas en cours d'exécution. Consultez le lien suivant http://www.sqaforums.com/showflat.php?Number=623277

0
olyv