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"/>
...
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 PATH
variable, %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:
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.
bin
existe déjà, <mkdir/>
ne sera pas exécuté.src
ou s'ils ont déjà été copiés dans bin
, la tâche <copy/>
ne s'exécutera pas.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.
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
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