Je veux exécuter une commande à partir d'un buildfile Ant, pour chaque fichier dans un répertoire.
Je recherche une solution indépendante de la plateforme.
Comment puis-je faire cela?
Bien sûr, je pourrais écrire un script dans un langage de script, mais cela ajouterait des dépendances supplémentaires au projet.
file-io
ant
build-process
build-automation
ivan_ivanovich_ivanoff
la source
la source
Utilisez la tâche <apply> .
Il exécute une commande une fois pour chaque fichier. Spécifiez les fichiers au moyen d'ensembles de fichiers ou de toute autre ressource. <apply> est intégré; aucune dépendance supplémentaire nécessaire; aucune implémentation de tâche personnalisée nécessaire.
Il est également possible d'exécuter la commande une seule fois, en ajoutant tous les fichiers en tant qu'arguments en une seule fois. Utilisez l'attribut parallel pour changer de comportement.
Désolé d'être en retard d'un an.
la source
Une approche sans ant-contrib est suggérée par Tassilo Horn (la cible d'origine est ici )
Fondamentalement, comme il n'y a pas d'extension de <java> (encore?) De la même manière que <apply> étend <exec> , il suggère d'utiliser <apply> (qui peut bien sûr aussi exécuter un programme java en ligne de commande)
Voici quelques exemples:
la source
Voici un moyen de le faire en utilisant javascript et la tâche ant scriptdef, vous n'avez pas besoin d'ant-contrib pour que ce code fonctionne car scriptdef est une tâche fourmi principale.
la source
project
est référencée dans l'exemple ci-dessus, mais sans définition préalable disponible. Ce serait bien d'avoir cela représenté ou clarifié. EDIT: n / m, trouvé qu'ilproject
s'agit d'une var prédéfinie pour accéder au projet en cours. J'avais soupçonné cela, mais je n'en étais pas sûr.ant-contrib est le mal; écrivez une tâche de fourmi personnalisée.
ant-contrib est mauvais parce qu'il essaie de convertir fourmi d'un style déclaratif à un style impératif. Mais xml fait un langage de programmation de merde.
En revanche, une tâche ant personnalisée vous permet d'écrire dans un vrai langage (Java), avec un véritable IDE, où vous pouvez écrire des tests unitaires pour vous assurer que vous avez le comportement souhaité, puis faire une déclaration propre dans votre script de construction à propos de le comportement que vous souhaitez.
Cette diatribe n'a d'importance que si vous vous souciez d'écrire des scripts ant maintenables. Si vous ne vous souciez pas de la maintenabilité, faites ce qui fonctionne. :)
Jtf
la source
Je sais que cet article est vraiment vieux, mais maintenant que certaines versions de temps et de fourmis sont passées, il existe un moyen de le faire avec les fonctionnalités de base des fourmis et j'ai pensé que je devrais le partager.
Cela se fait via un macrodef récursif qui appelle des tâches imbriquées (même d'autres macros peuvent être appelées). La seule convention est d'utiliser un nom de variable fixe (élément ici).
Les principales fonctionnalités nécessaires là où:
Je n'ai pas réussi à faire le variabel délimiteur, mais ce n'est peut-être pas un inconvénient majeur.
la source
Vous pouvez utiliser la tâche ant-contrib "for" pour parcourir la liste des fichiers séparés par n'importe quel délimiteur, le délimiteur par défaut est ",".
Voici l'exemple de fichier qui montre ceci:
la source
Faites ce que blak3r a suggéré et définissez le chemin de classe de vos cibles comme ceci
où lib est l'endroit où vous stockez votre pot
la source