Où puis-je obtenir la tâche Antlr Ant ?
Question
J'essaie d'appeler une tâche Antlr dans mon Ant build.xml comme suit :
<path id="classpath.build">
<fileset dir="${dir.lib.build}" includes="**/*.jar" />
</path>
...
<target name="generate-lexer" depends="init">
<antlr target="${file.antlr.lexer}">
<classpath refid="classpath.build"/>
</antlr>
</target>
Mais Ant ne trouve pas la définition de la tâche.J'y ai mis tout ce qui suit dir.lib.build
:
- antlr-3.1.jar
- antlr-2.7.7.jar
- antlr-runtime-3.1.jar
- modèle de chaîne-3.2.jar
Mais aucun d’entre eux ne semble avoir la définition de la tâche.(J'ai également essayé de mettre ces pots dans mon chemin de classe Ant ;même problème.)
La solution
Le pot de tâches Antlr actuel est disponible sur http://www.antlr.org/share/1169924912745/antlr3-task.zip
On peut le trouver sur le antlr.org site Web sous la rubrique « Partage de fichiers ».
Autres conseils
Vous devez utiliser le pot antlrall.jar.Vous pouvez continuer et simplement le déposer dans votre installation Ant, mais cela signifie que cela ne fonctionnera que pour cette seule installation.Nous enregistrons le fichier jar et utilisons taskdef pour charger le fichier jar afin qu'il ne devienne pas une autre étape pour les développeurs lorsqu'ils démarrent dans l'équipe ou passent à un nouvel ordinateur.
- Antlr http://ant.apache.org/manual/Tasks/antlr.html
- Utilisation de taskdef http://www.onjava.com/pub/a/onjava/2004/06/02/anttask.html
Je viens de faire fonctionner ça pour moi.Cela m'a pris une heure.Pouah.de toute façon,
Étape 1:télécharger la tâche ant-antlr3 à partir de
http://www.antlr.org/share/1169924912745/antlr3-task.zip
Étape 2:copier là où la fourmi peut le voir.Mon mac :
sudo cp /usr/local/lib/ant-antlr3.jar /usr/share/ant/lib/
ma boîte Linux :
sudo cp /tmp/ant-antlr3.jar /usr/local/apache-ant-1.8.1/lib/
Étape 3:assurez-vous que antlr2, antlr3, ST sont dans le chemin de classe.Tout en un, c'est ici :
http://antlr.org/download/antlr-3.3-complete.jar
Étape 4:utiliser dans build.xml
<path id="classpath">
<pathelement location="${antlr3.jar}"/>
<pathelement location="${ant-antlr3.jar}"/>
</path>
<target name="antlr" depends="init">
<antlr:ant-antlr3 xmlns:antlr="antlib:org/apache/tools/ant/antlr"
target="src/T.g"
outputdirectory="build">
<classpath refid="classpath"/>
</antlr:ant-antlr3>
</target>
Je viens d'ajouter une entrée de FAQ :
http://www.antlr.org/wiki/pages/viewpage.action?pageId=24805671
La manière la plus simple d'exécuter Antlr est d'exécuter le JAR Antlr :
<project default="antlr">
<target name="antlr">
<java jar="antlr-4.1-complete.jar" fork="true">
<arg value="grammar.g4"/>
</java>
</target>
</project>
C'est un peu plus lent, car il forke la JVM et exécute Antlr même si la grammaire n'a pas changé.Mais cela fonctionne de la même manière avec chaque version d'Antlr et ne nécessite aucune cible particulière.
Sur Ubuntu, cela devrait le rendre disponible :
sudo apt-get install ant-optional
Informations supplémentaires en plus de ce que tout le monde a contribué jusqu'à présent :
Le ant-optional
Le package dans Ubuntu inclut la tâche livrée avec Ant 1.8.2 qui est une tâche pour ANTLR 2.7.2, cela échouera donc avec une erreur comme décrit dans cet article.La méthode décrite par Terence est la meilleure façon d'utiliser la tâche ANTLR3.
Si vous n'avez pas d'accès root sur une machine Linux, vous pouvez installer le fichier ant-antlr3.jar dans le répertoire utilisateur Ant : ~/.ant/lib
.Vérifier avec ant -diagnostics
si ant-antlr3.jar est visible par Ant, comme expliqué dans cet autre post.
Si vous utilisez Eclipse, vous devrez redémarrer l'EDI avant qu'il ne reconnaisse la nouvelle tâche et vous devrez également inclure antlr3.jar
et stringtemplate.jar
dans votre chemin de classe (mais ant-antlr3.jar
n'est pas nécessaire).