8

我正在尝试用 Maven 构建一个 ANTLR 项目,项目结构就像

src/main +
      |-antlr4
             |-fo/bar
                   |-G1.g4
                   |-G2.g4
             |-imports

其中 G1 导入 G2 如下:

grammar G1;
import G2;

但是,当我使用 Maven 构建时,出现以下错误:

[ERROR] Message{errorType=CANNOT_FIND_IMPORTED_GRAMMAR, args=[G2, fo\bar\G1.g4], e=null, fileName='null', line=-1, charPosition=-1}

如果我将G1.g4G2.g4直接放在antlr4目录下,它可以正常工作。在我看来,当把语法文件放在一个包中时,它需要在 import 语句中使用特殊的语法。

我注意到Antlr4 maven 插件在不同目录中找不到语法文件的问题,但是在这里,语法在一个目录中。

4

1 回答 1

12

我认为您需要G2.g4导入包(src/main/antlr4/imports)中的语法,但您将复制您的语法。为避免这种情况,请更改 ANTLR 插件的导入设置,如下所示:

<build>
  <plugins>
    <plugin>
      <groupId>org.antlr</groupId>
      <artifactId>antlr4-maven-plugin</artifactId>
      <version>4.1</version>
      <!-- vvv key part here vvv -->
      <configuration>
        <libDirectory>${basedir}/src/main/antlr4/fo/bar</libDirectory>
      </configuration>
      <!-- ^^^ key part here ^^^ -->
      <executions>
        <execution>
          <goals>
            <goal>antlr4</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

注意配置libDirectory

于 2013-10-30T10:22:15.743 回答