在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]
答案 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
。
因此它是串联的而不是被覆盖的。