Тестовая установка Antlr4 и maven

Я немного пытаюсь понять, как я могу использовать подключаемый модуль maven antlr4 для запуска класса TestRig?

Я прочитал вывод mvn antlr4:help -Ddetail=true, который является единственной документацией, которую мне удалось найти, но в ней не упоминается, как использовать TestRig. Итак, каков рекомендуемый способ использования тестовой установки вместе с maven? использование метода псевдонима grun здесь не кажется очень элегантным.

ОБНОВЛЕНО – Обоснование

Привет :)

Правильно, не поймите меня неправильно, но я действительно не понимаю, почему вам не нужна эта функциональность в плагине maven? И я не понимаю, почему его душой должно быть составление грамматик?

В настоящее время, если я поддерживаю сборку с Maven и использую antlr4-maven-plugin , он установит как плагин, так и antlr 4.1 в моем репозитории maven. Если это уже есть, зачем мне начинать добавлять что-то в свой путь к классам и создавать псевдонимы, когда maven может позаботиться об этом? Я имею в виду, это то, для чего на самом деле нужен maven. Если бы у меня была цель antlr4:TestRig, то все, что я делал бы, это использовал бы ее. Нет необходимости вручную поддерживать путь к классу или создавать псевдонимы bash. Это просто сработает.

И быть гораздо более элегантным, чем жестко кодировать элементы из моего локального репозитория maven в моем пути к классам и поддерживать псевдонимы bash. Или, альтернативно, поддерживать две установки на каждый. версия antlr, которую я хочу использовать (одна поддерживается мной, просто для использования TestRig, а другая поддерживается maven для всего остального).

Кроме того, если бы я хотел использовать другую версию antlr, мне не нужно было бы обновлять путь к классам и мои псевдонимы, maven просто управлял бы всем этим для меня :)


person JustDanyul    schedule 02.09.2013    source источник


Ответы (3)


Зачем плагину Maven запускать класс TestRig? Работа подключаемого модуля Maven заключается в преобразовании .g4 файлов грамматики в .java исходных файлов в соответствующих местах пакетов и обеспечении компиляции этих сгенерированных файлов. TestRig не используется ни для какой части этого.

Изменить: я использую ANTLR уже много лет во многих приложениях. За все это время я ни разу не обновлял системный путь к классам, не управлял ANTLR/gunit/TestRig из командной строки и не создавал для него псевдонимы. Это бесполезно для автоматизированного тестирования и неизбежно приводит пользователей к проблемам, которые вы описали. Тем не менее, мысль о том, что TestRig нуждается в специальной поддержке в плагине Maven, также никогда не приходила мне в голову, потому что лучшие решения уже существуют.

Некоторые альтернативы

  1. Вы можете использовать плагин surefire и написать тест JUnit, который напрямую выполняет операции с вашей грамматикой (создает лексер/парсер, анализирует некоторые входные данные и, возможно, даже вызывает inspect() для результирующего дерева разбора.
  2. Вы можете использовать плагин surefire и написать тест JUnit, который явно вызывает TestRig.main(String[]) с правильными аргументами.
  3. Вы можете изменить плагин ANTLR 4 Maven, чтобы добавить новую цель для запуска TestRig, и отправить запрос на включение в проект, чтобы включить его в будущую версию (вам нужно будет привести очень убедительные доводы, поскольку уже есть 2 альтернативы, которые больше подходят для долгосрочного успешного тестирования проекта с использованием ANTLR 4).
person Sam Harwell    schedule 02.09.2013
comment
@JustDanyul Спасибо, теперь гораздо яснее, о чем вы спрашиваете. Я обновил свой ответ. - person Sam Harwell; 03.09.2013
comment
спасибо, что снова обратились ко мне. Я не подумал о варианте № 2, который будет неплохо сочетаться с уже существующими модульными тестами. Ваше здоровье. - person JustDanyul; 04.09.2013

Вот как я вызываю TestRig с Maven:

mvn exec:java -Dexec.mainClass="org.antlr.v4.runtime.misc.TestRig" 
-Dexec.args="<DOT_NOTATION_GRAMMAR_CLASSPATH> <START_RULE> 
-gui <INPUT_FILE>"

Итак, если у вас есть MyGrammar.g4 в src/main/antlr4/com/test/parser с начальным правилом startRule:

mvn exec:java -Dexec.mainClass="org.antlr.v4.runtime.misc.TestRig" 
-Dexec.args="com.test.parser.MyGrammar startRule 
-gui <INPUT_FILE>"
person jasterm007    schedule 21.12.2014

У меня был аналогичный вопрос, поскольку я хотел использовать параметр TestRig -gui для отладки моей грамматики. Я не нашел способа запустить графический интерфейс через antlr4-maven-plugin, но мне удалось создать удовлетворительный CLASSPATH. Ключ должен был включать target/classes.

# Assuming your project is in $PROJECT ..
CLASSPATH=".:/usr/local/lib/antlr-4.1-complete.jar:$PROJECT/target/classes"
alias grun='java org.antlr.v4.runtime.misc.TestRig'
mvn -q compile
grun MyGrammer startingRule -gui < test_input

Должен создавать прекрасное графическое представление синтаксического дерева.

Возможно, это не тот ответ, который вы ищете, но я надеюсь, что он поможет кому-то еще. (например, я, завтра, когда забуду)

person Jared Beck    schedule 06.11.2013