2010-06-11 3 views
2

Je voudrais que Ant inclue ou importe automatiquement les ressources correspondant à un modèle particulier, mais je suis vraiment aux prises avec la syntaxe. Voici ce que j'ai essayé:Ant 1.8 inclure ou importer avec la collection de ressources imbriquées

<import> 
    <fileset dir="${basedir}" includes="*-graph.xml" /> 
</import> 

Cependant, je viens de recevoir le message d'erreur

import requires file attribute or at least one nested resource 

La documentation pour l'importation (et Include) autant dire que vous pouvez utiliser une collection de ressources imbriquée, et La documentation pour les collections de ressources indique < le fichier > est une collection de ressources. J'ai googlé et je ne trouve aucun exemple utile.

J'utilise 1.8.1 Ant (vérifié avec -version ant) ​​

EDIT

trouvé le problème. Premièrement, QUELQUE CHOSE doit correspondre à l'expression. Avec aucun fichier qui correspond, il explose - même avec optional = true, ce qui est bizarre! Deuxièmement, les fichiers correspondants ont un fichier Ant valide (même s'ils ne contiennent que < project/> - créer simplement un fichier vide ne suffisait pas).

Meilleurs messages d'erreur, s'il vous plaît Apache! :-)

Répondre

1

Essayez:

<foreach target="-import" param="file.name"> 
    <fileset dir="${basedir}" includes="*-graph.xml" /> 
</foreach> 

<target name="-import"> 
    <import file="${file.name}" /> 
</target> 

est que je ne suis pas sûr dans les tâches ant-contrib (http://ant-contrib.sourceforge.net/tasks/tasks/index.html) si cela fonctionne, je suis juste venu avec elle à la volée.

+0

Je suppose que ce serait le cas, mais j'essaie désespérément d'échapper à autant de choses que je peux. J'essaie de simplifier un script de construction de ligne de 20 trillions qui utilise une énorme quantité de ant-contrib pour essayer de faire des choses procédurales au lieu de laisser la fourmi se contenter de choses déclaratives. Ant 1.8 et les points d'extension sont ma première étape sur cette route. – dty

1

Voici une façon simple de résoudre ce problème:

<project name="the-name-of-the-project"> 
    <import> 
    <fileset dir="${basedir}" includes="*-graph.xml" erroronmissingdir="false"/> 
    <fileset file="${ant.file.the-name-of-the-project}"/> 
    </import> 
</project> 

De cette façon, l'ensemble des fichiers importés est jamais vide car il inclut le fichier contenant cette déclaration. Cela fonctionne uniquement pour les directives <import>, car il omet déjà les fichiers importés; <include> directives entraînerait trivialement une récursivité.

Notez que erroronmissingdir="false" est facultatif si basedir existe toujours.

Questions connexes