2010-12-09 47 views
7

Je suis sûr que cela a déjà été demandé ou est assez simple. Mais pour une raison quelconque, je n'arrive pas à le faire fonctionner. Je veux utiliser ant pour copier le ${build.classpath} (qui contient une liste de fichiers séparés par deux points) au ${output.dir}/myapp/WEB-INF/lib.Ant copie classpath jars à un répertoire

Je possède ce moment et il ne semble pas fonctionner:

<copy toDir="${output.dir}/myapp/WEB-INF/lib"> 
    <fileset file="${build.classpath}" /> 
</copy> 

Il traite l'ensemble classpath un seul fichier. Comment puis-je faire fonctionner cela?

Répondre

12

Le Manuel Ant sur la tâche de copie contient la réponse à votre problème. L'un des exemples extraits il fournit:

Ramassez tous les éléments du CLASSPATH réglage actuel dans un répertoire de destination, aplatir la structure du répertoire.

<copy todir="dest" flatten="true"> 
    <path> 
    <pathelement path="${java.class.path}"/> 
    </path> 
</copy> 
+1

Merci beaucoup, je dois avoir oublié cela en quelque sorte. Cela a fonctionné parfaitement. Il copie tout dans 'classpath' dans le répertoire de destination. Mais le 'classpath' peut contenir des répertoires ou des fichiers qui ne sont pas des jars, comment puis-je exclure tout ce qui n'est pas un fichier jar? –

+0

Remplacez l'utilisation du chemin par . –

+1

La partie la plus importante de la réponse est l'option ** 'flatten =" true "' **. Si vous ne définissez pas, je ne ferai rien. – lucasvc

0

Je pense que vous devriez mettre tous vos fichiers jar séparés par deux points dans un dossier racine. Si ce n'est pas possible, créez une tâche distincte qui place ces fichiers jar dans un dossier (peut-être temporaire). Et affectez ${build.classpath} à ce dossier. Utilisez <fileset dir="${build.classpath}"/> dans votre clause de copie.

J'espère que cela devrait aider.

1

Je pense somethink comme cela devrait fonctionner:

<copy todir="${output.dir}/myapp/WEB-INF/lib" verbose="yes" flatten="yes" failonerror="no">  
    <fileset dir="${build.classpath}">  
     <include name="*.jar" />  
    </fileset>  
</copy> 

ou avec caractères génériques dans comprennent: <include name="**/*.jar" />

+1

Désolé, cela ne fonctionne pas du tout. Le 'classpath' contient une liste de chemins séparés par deux points. La seule chose qui a fonctionné pour moi jusqu'ici, est la réponse 'user268396'. –