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