在Antlr4 maven插件中指定包的格式是什么?

时间:2013-08-14 22:26:41

标签: 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]

6 个答案:

答案 0 :(得分:7)

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

可以像这样指定其他参数:

<arguments>
  <argument>arg1</argument>
  <argument>arg2</argument>
</arguments>

答案 1 :(得分:4)

如果我是你,我会为每个包制作一个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>

答案 2 :(得分:3)

您的配置参数语法错误。

请从

更改antlr4-maven-plugin的配置
<configuration>
    <arguments>package my.package.name</arguments>
</configuration>

到:

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

我试过

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

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

答案 5 :(得分:0)

我在src/main/antlr4/de/schmitz中有Demo.g4。

现在将类生成到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

因此它是串联的而不是被覆盖的。