Вопрос

Я пытаюсь вызвать задачу Antlr в моем Ant build.xml следующим образом:

<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>

Но Ant не может найти определение задачи.Я поместил все следующее в это dir.lib.build:

  • antlr-3.1.jar
  • antlr-2.7.7.jar
  • antlr-runtime-3.1.jar
  • stringtemplate-3.2.jar

Но ни один из них, похоже, не имеет определения задачи.(Я также пытался поместить эти банки в свой путь к классам Ant;та же проблема.)

Это было полезно?

Решение

Текущий jar-файл задачи Antlr доступен по адресу http://www.antlr.org/share/1169924912745/antlr3-task.zip

Его можно найти на antlr.org веб-сайте в разделе «Общий доступ к файлам».

Другие советы

Вам следует использовать банку antlrall.jar.Вы можете пойти дальше и просто добавить его в свою установку Ant, но это означает, что он будет работать только для этой одной установки.Мы проверяем jar и используем Taskdef для загрузки файла jar, чтобы это не стало еще одним шагом для разработчиков, когда они начинают работать в команде или переходят на новый компьютер.

Я только что получил это для себя.У меня занял час.фу.в любом случае,

Шаг 1:скачать задачу ant-antlr3 с

http://www.antlr.org/share/1169924912745/antlr3-task.zip

Шаг 2:скопируйте туда, где муравей сможет это увидеть.Мой Мак:

sudo cp /usr/local/lib/ant-antlr3.jar /usr/share/ant/lib/

мой Linux-бокс:

sudo cp /tmp/ant-antlr3.jar /usr/local/apache-ant-1.8.1/lib/

Шаг 3:убедитесь, что antlr2, antlr3, ST находятся в пути к классам.Все в одном здесь:

http://antlr.org/download/antlr-3.3-complete.jar

Шаг 4:использовать в 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>

Просто добавил запись в FAQ:

http://www.antlr.org/wiki/pages/viewpage.action?pageId=24805671

Самый простой способ запустить Antlr — запустить JAR Antlr:

<project default="antlr">
  <target name="antlr">
    <java jar="antlr-4.1-complete.jar" fork="true">
      <arg value="grammar.g4"/>
    </java>
  </target>
</project>

Это немного медленнее, поскольку при этом разветвляется JVM и выполняется Antlr, даже если грамматика не изменилась.Но он работает одинаково со всеми версиями Antlr и не требует каких-либо специальных целей.

В Ubuntu это должно сделать его доступным:

sudo apt-get install ant-optional

Дополнительная информация помимо того, что уже внесли все остальные:

А ant-optional Пакет в Ubuntu включает задачу, поставляемую с Ant 1.8.2, которая является задачей для ANTLR 2.7.2, поэтому она завершится с ошибкой, как описано. в этом посте.Метод, описанный Теренсом, — лучший способ использовать задачу ANTLR3.

Если у вас нет root-доступа на компьютере с Linux, вы можете установить файл ant-antlr3.jar в каталог пользователя Ant: ~/.ant/lib.Проверить с ant -diagnostics виден ли Ant-antlr3.jar для Ant, как объяснено в этом другом посте.

Если вы используете Eclipse, вам необходимо перезапустить IDE, прежде чем она распознает новую задачу, а также вам необходимо включить antlr3.jar и stringtemplate.jar в вашем пути к классам (но ant-antlr3.jar не обязательно).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top