10

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

6 回答 6

9

如果我是你,我会为每个包制作一个 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 会将其识别为参数

于 2013-08-14T22:42:24.837 回答
7

包是根据文件在项目中的位置自动确定的,类似于为 Java 文件确定包的方式。输出也放置在由源文件的位置确定的位置。要更改生成代码的包,您需要移动语法文件。

其他参数可以这样指定:

<arguments>
  <argument>arg1</argument>
  <argument>arg2</argument>
</arguments>
于 2013-08-14T23:14:34.577 回答
5

您的配置参数语法错误。

请更改 antlr4-maven-plugin 的配置

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

到:

<configuration>
    <arguments>
        <argument>-package</argument>
        <argument>my.package.name</argument>
    </arguments>
</configuration>
于 2016-02-25T11:01:00.593 回答
1

为了将包信息添加到生成的代码中,您必须在 g4 文件中添加以下注释:

@header {
    package com.this.is.my.package;
}
于 2014-05-16T12:39:28.673 回答
1

我试过

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

但是当您进行导入时,它会为导入的每个文件添加包行,因此会在生成的文件中引发编译器错误。您必须小心添加@header,以便具有导入语法的文件只有一个包行。我认为这是一个错误。

于 2016-04-08T21:12:11.507 回答
0

我有 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.

所以它被连接而不是覆盖。

于 2020-01-29T10:08:05.493 回答