Каков формат указания пакета в плагине maven Antlr4?

Каков формат указания пакета в плагине Antlr4 maven antlr4-maven-plugin?

Я чувствую, что должен быть в состоянии сделать следующее:

<plugin>
    <groupId>com.tunnelvisionlabs</groupId>
    <artifactId>antlr4-maven-plugin</artifactId>
    <version>4.0</version>
    <configuration>
        <arguments>package my.package.name</arguments>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>antlr4</goal>
            </goals>
        </execution>
    </executions>
</plugin>

но это приводит к следующей ошибке:

[ERROR] Failed to execute goal com.tunnelvisionlabs:antlr4-maven-plugin:4.0:antlr4 (default) on project my_project: Unable to parse configuration of mojo com.tunnelvisionlabs:antlr4-maven-plugin:4.0:antlr4 for parameter arguments: Cannot assign configuration entry 'arguments' with value 'package my.package.name' of type java.lang.String to property of type java.util.List -> [Help 1]

person Brian Kent    schedule 14.08.2013    source источник


Ответы (6)


Если я на вашем месте, я сделаю проект maven для каждого пакета и попробую это

<plugin>
<groupId>org.antlr</groupId>
<artifactId>antlr4-maven-plugin</artifactId>
<version>4.0</version>
<configuration>
    <sourceDirectory>${basedir}/src</sourceDirectory>
</configuration>
<executions>
    <execution>
        <goals>
            <goal>antlr4</goal>
        </goals>
    </execution>
</executions>
</plugin>

но обычно, когда я передаю аргумент в конфигурации maven, я делаю следующее. но я не уверен в этом синтаксисе в antlr4

<plugin>
<groupId>com.tunnelvisionlabs</groupId>
<artifactId>antlr4-maven-plugin</artifactId>
<version>4.0</version>
<configuration>
    <arguments>
      <argument>-package</argument>
      <argument>my.package.name</argument>

   </arguments>
</configuration>
<executions>
    <execution>
        <goals>
            <goal>antlr4</goal>
        </goals>
    </execution>
</executions>
</plugin>

Изменить: обратите внимание на - перед package, чтобы плагин antlr-maven-plugin распознал его как параметр.

person mebada    schedule 14.08.2013
comment
У меня сработало после добавления опции минус: ‹argument›-package‹/argument› - person tassaert.l; 29.01.2016

Пакет определяется автоматически на основе расположения файла в вашем проекте, подобно тому, как пакет определяется для файлов Java. Выходные данные также размещаются в месте, определяемом расположением исходного файла. Чтобы изменить пакет, в котором генерируется код, вам потребуется переместить файл грамматики.

Другие аргументы могут быть указаны следующим образом:

<arguments>
  <argument>arg1</argument>
  <argument>arg2</argument>
</arguments>
person Sam Harwell    schedule 14.08.2013

Синтаксис ваших аргументов конфигурации неверен.

Пожалуйста, измените конфигурацию antlr4-maven-plugin с

<configuration>
    <arguments>package my.package.name</arguments>
</configuration>

to:

<configuration>
    <arguments>
        <argument>-package</argument>
        <argument>my.package.name</argument>
    </arguments>
</configuration>
person dongpf    schedule 25.02.2016

Чтобы добавить информацию о пакете в сгенерированный код, вы должны добавить следующую аннотацию в файл g4:

@header {
    package com.this.is.my.package;
}
person Renato Mendes    schedule 16.05.2014

Я старался

@header {
    package com.this.is.my.package;
}

но когда у вас есть импорт, он добавляет строку пакета для каждого импортированного файла, и в результате возникают ошибки компилятора в сгенерированном файле. Вы должны быть осторожны, чтобы добавить @header, чтобы файл с импортированными грамматиками имел только одну строку пакета. Я думаю, это ошибка.

person Mike    schedule 08.04.2016

У меня есть Demo.g4 внутри src/main/antlr4/de/schmitz.

Теперь классы генерируются на target/generated-sources/antlr4/de/schmitz.

Пакет de.schmitz.

Все правильно.

Теперь я хочу изменить пакет и папки сгенерированных классов (фактически НЕ перемещая мой Demo.g4):

<arguments>
    <argument>-package</argument>
    <argument>my.package</argument>
</arguments>

Классы генерируются до target/generated-sources/antlr4/de/schmitz.

Пакет my.package.

Это не может быть скомпилировано, так что это может быть ошибкой.

Итак, я хочу изменить выходной каталог:

<outputDirectory>${project.build.directory}/generated-sources/antlr4/my/package</outputDirectory>

Теперь он глючит.

Пакет my.package.

Но папка target/generated-sources/antlr4/my/package/de/schmitz.

Таким образом, он объединяется, а не перезаписывается.

person Marco Schmitz    schedule 29.01.2020
comment
Я создал отчет об ошибке: github.com/antlr/antlr4/issues/2738 - person Marco Schmitz; 29.01.2020
comment
Это должен быть другой вопрос - person Nicola Musatti; 22.05.2021