Supposons qu'on veuille afficher un classpath qu'on a précédemment défini dans Ant. Dans tout ce qui va suivre, path.classpath.compile correspondra à l'identifiant du classpath qui doit être préalablement défini et qu'on veut afficher
On utilise habituellement quelque chose du genre :
<property name="echo.path.compile" refid="path.classpath.compile">
<echo level="info" message="${echo.path.compile}" />
Ce qui génère dans la console quelque chose du style (suivant l'os, le séparateur des éléments du classpath pourra être différent)
[echo] /tomcat/common/lib/jsp-api.jar:/tomcat/common/lib/ant.jar:/tomcat/common/lib/jmx.jar:/tomcat/common/lib/commons-collections-3.1.jar:/tomcat/common/lib/commons-dbcp-1.2.1.jar:/tomcat/common/lib/commons-el.jar:/tomcat/common/lib/commons-lang-2.1.jar:/tomcat/common/lib/commons-pool-1.2.jar:/tomcat/common/lib/tools.jar
C'est n'est vraiment pas très lisible, surtout dans le cas où on a beaucoup de jars (par exemple, avec l'ami Weblogic).
Du coup, ce serait par exemple plus clair d'avoir tous les éléments les uns en dessous des autres.
Cette problématique étant loin d'être nouvelle, je me suis complètement inspiré d'un post de 2005 intitulé Pretty printing Java classpaths using Ant's pathconvert task qui détaille parfaitement la solution et sa mise en oeuvre.
Je reproduis ici telle quelle la solution proposée.
<!-- get the source compile classpath in a printable form -->
<pathconvert pathsep="${line.separator}| |-- "
property="echo.path.compile"
refid="path.classpath.compile">
</pathconvert>
<echo message="|-- compile classpath"/>
<echo message="| |"/>
<echo message="| |-- ${echo.path.compile}"/>
[echo] |-- compile classpath
[echo] | |
[echo] | |-- /tomcat/common/lib/jsp-api.jar
[echo] | |-- /tomcat/common/lib/ant.jar
[echo] | |-- /tomcat/common/lib/jmx.jar
[echo] | |-- /tomcat/common/lib/commons-collections-3.1.jar
[echo] | |-- /tomcat/common/lib/commons-dbcp-1.2.1.jar
[echo] | |-- /tomcat/common/lib/commons-el.jar
[echo] | |-- /tomcat/common/lib/commons-lang-2.1.jar
[echo] | |-- /tomcat/common/lib/commons-pool-1.2.jar
[echo] | |-- /tomcat/common/lib/tools.jar
[echo] | |-- ...
Si on souhaite factoriser cette technique pour l'utiliser à plusieurs endroits, on peut passer par un macrodef comme décrit dans un commentaire du même post que précédemment.