où trouver les tâches de fourmi facultatives manquantes?
Je voulais avoir un regard qui en propriétés système (et les valeurs), donc, le plus simple (si ce n'est l'écriture d'un nouveau programme Java ici) serait l'ajout de quelques lignes à mon script ant:
<target name="properties">
<echoproperties/>
</target>
Mais l'exécution ant donne mon ce message d'erreur:
/u/ebermann/projektoj/stackoverflow-examples/build.xml:19: Problem: failed to create task or type echoproperties
Cause: the class org.apache.tools.ant.taskdefs.optional.EchoProperties was not found.
This looks like one of Ant's optional components.
Action: Check that the appropriate optional JAR exists in
-/usr/share/ant/lib
-/u/ebermann/.ant/lib
-a directory added on the command line with the -lib argument
Do not panic, this is a common problem.
The commonest cause is a missing JAR.
This is not a bug; it is a configuration problem
Ok, donc je ne panique pas, mais se demandent quoi faire.
J'ai Ant 1.7.1 (un système OpenSUSE), et malheureusement pas de documentation pour cette version, et je ne suis pas root pour installer une fourmi actuel de la version ou de la documentation pour l'ancienne version (j'ai juste téléchargé et il ne veut toujours pas dire que le fichier jar est requis ici). Des répertoires listés ci-dessus, seulement /usr/share/ant/lib
existe, mais il ne contient rien comme optional
.
Je voudrais télécharger le jar nécessaires fichier et le mettre dans mon répertoire home, mais où le trouver? Le ant archive à télécharger contient rien de tout cela, et je n'ai aucune idée de l'endroit où le reste de la recherche. (J'ai fait de google un peu, mais n'a pas trouvé quoi que ce soit.
Donc, quelqu'un peut-il me donner quelques conseils sur où trouver le bon fichier jar?
(Je suppose que la solution est très simple, et quelque chose est juste le blocage de mon point de vue.)
Après vahapt's réponse, j'ai téléchargé le fichier à partir de la apache référentielet le mettre dans le répertoire /u/ebermann/.ant/lib
mentionné par le message d'erreur. L'exécution de ant properties
une fois encore le même résultat que ci-dessus.
$ jar -tf /u/ebermann/.ant/lib/ant-nodeps-1.7.1.jar | grep 'EchoProperties.class'
org/apache/tools/ant/taskdefs/optional/EchoProperties.class
Cela semble comme il se doit le travail - est le message d'erreur tout simplement mauvais?
Si je l'ai mis directement dans le CLASSPATH, il travaille:
$ CLASSPATH=/u/ebermann/.ant/lib/ant-nodeps-1.7.1.jar ant properties
Buildfile: build.xml
properties:
[echoproperties] #Ant properties
[echoproperties] #Thu Mar 10 00:46:22 CET 2011
...
[echoproperties] user.name=ebermann
[echoproperties] user.timezone=
BUILD SUCCESSFUL
Total time: 0 seconds
Je ne veux pas changer mes normale de la variable CLASSPATH, et il devrait fonctionner en le plaçant dans ce répertoire, ou ai-je comprendre quelque chose de mal?
Toutes les idées, ou est-ce une fourmi bug?
(D'ailleurs, pourquoi est ce fichier mentionné nulle part dans la documentation de ant?)
Edit:
Après la réponse de vahaptmon ant-fichier ressemble à ceci:
<project name="stackoverflow-examples" basedir=".">
<target name="echoproperties.prepare">
<available property="echoproperties.works"
classname="org.apache.tools.ant.taskdefs.optional.EchoProperties"
/>
</target>
<target name="echoproperties.init"
depends="echoproperties.prepare"
unless="echoproperties.works">
<taskdef name="echoproperties" classname="org.apache.tools.ant.taskdefs.optional.EchoProperties">
<classpath>
<fileset dir="${user.home}/.ant/lib">
<include name="ant-nodeps.jar" />
</fileset>
</classpath>
</taskdef>
</target>
<target name="properties" depends="echoproperties.init">
<echoproperties/>
</target>
</project>
Cette ré-enregistre la tâche que si elle n'est pas déjà dans la fourmi classpath. (Ainsi, il convient également de travailler pour compléter ant les installations qui n'ont pas ce fichier dans le répertoire d'accueil).
Je dirais que This is not a bug; it is a configuration problem
n'est pas totalement droit, encore plus que de mettre le fichier dans le répertoire indiqué ne pas aider.
Encore une observation intéressante: L'nodeps.jar dans ${user.home}/.ant/lib
(c'est à dire maintenant /u/ebermann/.ant/lib/ant-nodeps.jar
) est déjà dans le chemin de classe (celle indiquée par ${java.class.path}
mais cela ne semble pas aider pour <echoproperties>
de travailler sans cette taskdef
.
Donc, cela marche aussi:
<target name="echoproperties.init"
depends="echoproperties.prepare"
unless="echoproperties.works">
<taskdef name="echoproperties"
classname="org.apache.tools.ant.taskdefs.optional.EchoProperties"
classpath="${java.class.path}" />
</target>
source d'informationauteur Paŭlo Ebermann
Vous devez vous connecter pour publier un commentaire.
Lorsque vous effectuez une recherche sur google, les résultats du point de ant-nodeps-1.7.1.jar
Assurez-vous que jar existe et que vous l'avez ajouté dans le classpath
Pour la deuxième partie de votre question:
SOLUTION 1. Vous n'avez pas besoin de modifier votre variable CLASSPATH. Au lieu de cela vous pouvez l'ajouter en ajoutant le paramètre -cp [EMPLACEMENT des FICHIERS JAR] (-cp est "java" exécutable)
La SOLUTION 2. Les fichiers Jar sont tout simplement des fichiers zip, ouvrir ant-nodeps.jar de copier son contenu à ant.jar jeter ant-nodeps.jar
SOLUTION 3. Voir l'exemple ci-dessous. taskdef est une fourmi fonction qui charge un bocal ou une classe dans la hiérarchie du chargeur de classe. (Vous charger la classe avant de l'utiliser, fonctionne comme un charme)
J'ai téléchargé Ant 1.7.1 et regardé dans la documentation qui l'accompagne. Il décrit
echoproperties
comme une tâche facultative, mais ne mentionne pas où obtenir de l'jarfiles pour cette option.Regardant à l'intérieur du dossier lib, j'ai découvert le
ant-nodeps.jar
. Apparemment, il a été inclus avec Ant 1.7.1.Je vous recommande de télécharger et d'installer Ant 1.8. Depuis Fourmi est un fichier jar Java, c'est pas vraiment si difficile à installer la dernière et meilleure version.
J'ai regardé sur mon Mac, et
/usr/bin/ant
est un lien vers/usr/share/ant/bin
et/usr/share/ant/
est un lien vers/usr/share/java/ant-1.8.2
. Donc, tout ce que j'ai à faire est de pointer/usr/share/ant/bin/
de la bonne version de Ant.En Ant 1.8.2, echoproperties est maintenant une tâche standard.