问题描述
我有一个 project,我想在其中使用 ANTLR4 生成的类在一段 Kotlin 代码中。
在pom.xml中,ANTLR4配置如下。
<dependencies>
<dependency>
<groupId>org.antlr</groupId>
<artifactId>antlr4-runtime</artifactId>
<version>4.7.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.antlr</groupId>
<artifactId>antlr4-maven-plugin</artifactId>
<version>4.7.1</version>
<executions>
<execution>
<goals>
<goal>antlr4</goal>
</goals>
</execution>
</executions>
</plugin>
生成的类放入target/generated-sources/antlr4
:
mvn clean package
、mvn clean assembly
,以及在Idea中重建项目导致如下错误:
请注意,错误仅发生在 Kotlin 类 Transpiler.kt 中,而不会发生在 test 中。
我该如何解决这个问题(确保 ANTLR4 生成的类可以在 Kotlin 代码中使用)?
更新 1: 按照@Bart Kiers 的建议移动语法文件并执行 mvn clean antlr4:antlr4
后,Idea 中的错误消失了。但是 mvn clean antlr4:antlr4 install
仍然会导致 build errors:
[ERROR] Failed to execute goal org.jetbrains.kotlin:kotlin-maven-plugin:1.4.21:compile (compile) on project elispt: Compilation failure: Compilation failure:
[ERROR] /Users/dp118m/dev/misc/elispt/src/main/kotlin/com/dpisarenko/deplorable/transpiler.kt:[9,21] Unresolved reference: DeplorableLexer
[ERROR] /Users/dp118m/dev/misc/elispt/src/main/kotlin/com/dpisarenko/deplorable/transpiler.kt:[11,22] Unresolved reference: DeplorableParser
[ERROR] /Users/dp118m/dev/misc/elispt/src/main/kotlin/com/dpisarenko/deplorable/transpiler.kt:[12,21] Unresolved reference: DeplorableParser
解决方法
如果您执行以下操作,它应该可以工作:
- 将
Deplorable.g4
移至src/main/antlr4/com/dpisarenko/deplorable/
(注意您将它放在src/main/antlr4/com.dpisarenko.deplorable/
中!) - 运行
mvn clean antlr4:antlr4
- 如果尚未完成,请将
target/generated-sources/antlr4
标记为“Generated Sources Root”(在您的 IDE 中右键单击它并选择Mark Directory as
)
如果没有,请尝试使用最新的 ANTLR4 版本:4.9.1
(不仅是工具和运行时,还包括 antlr4-maven-plugin
)。