我无法让Intellij识别出来自antlr4的源代码。对生成的代码的任何引用都显示为错误,代码完成不起作用等。
我正在使用maven和antlr4-maven-plugin来生成代码。 我的代码,引用生成的代码编译并在maven下构建良好。 生成的代码在/ target / generated-sources / antlr4下,这是Intellij所期望的。
我已经尝试了常用的修复程序,例如重新导入maven项目,更新文件夹,使缓存无效等等。它们似乎都无法正常工作。
之前有人见过吗? 有没有办法直接在Intellij中指向生成的源?
答案 0 :(得分:10)
target/generated-sources/antlr4
不会自动标记为源目录,而是直接子目录com.example
。 Intellij Idea无法检测target/generated-sources/antlr4/com.example
内的类的正确包。
源文件*.g4
位于src/main/antlr4/com.example
,但实际上应该是src/main/antlr4/com/example
。请注意/
。您可能忘记在Idea中将src/main/antlr4
标记为源目录,当您认为正在创建包结构时,实际上您只创建了名为com.example
的单个目录。
将src/main/antlr4
标记为源目录,创建正确的目录结构src/main/antlr4/com/example
。重建。
转到项目结构 - 模块 - 源文件夹并找到target/generated-sources/antlr4/com.example
- 点击编辑属性并将包前缀设置为com.example
。
不同但相关的问题here
答案 1 :(得分:4)
事实证明,我摆弄偏好导致了这个问题。如果其他人有这个问题:
正如v0rl0n所述,首先确保将gen文件夹列为源。转到模块设置 - > 模块 - >的来源即可。
向右看蓝色源文件夹。确保列出生成的源文件夹(它们的行上应该有 [生成] 标记)。
如果您在此处列出了生成的源目录,但仍然无法识别它们,请转到偏好设置 - > 文件类型。查看忽略文件和文件夹字段。确保没有列出与生成的源目录匹配的任何内容。
就我而言,我已将目标添加到此列表中,这导致了我的问题,并且真的很难找到。
答案 2 :(得分:2)
我认为可能是类似的问题。我是IntelliJ的新手,所以我在某种程度上猜测。
项目中的gen文件夹是棕色(即资源)还是蓝色(源代码)?
我无法让我的项目识别生成的代码,直到我设法将gen文件夹注册为包含源代码的文件夹。
很抱歉,你可能需要摆弄它 - 我不记得我是怎么做到的 - 但是在我改变它之后一切都很顺利。
答案 3 :(得分:2)
对我有用的步骤:
答案 4 :(得分:1)
我的问题有点类似于@spilymp's:
我将*.g4
文件直接放在src/main/antlr4
中:
.
├── src/
| └── main/
| ├── antlr/
| | ├── Main.g4
| | └── imported.g4
| └── java/
| └── com/
| └── test/
| └── Test.java
导致在default
包中生成源。我更改了包结构以使其与Java相匹配:
.
├── src/
| └── main/
| ├── antlr/
| | ├── com/
| | | └── test/
| | | └── Main.g4
| | └── imports/
| | └── imported.g4
| └── java/
| └── com/
| └── test/
| └── Test.java
(请注意,导入必须直接进入src/main/antlr4/imports
)
此后,我仅通过maven菜单([模块]>插件> antlr4> antlr4:antlr4)运行了antlr4
目标,该目标在默认位置(target/generated-sources/antlr4
)中生成了源他们已经被Intellij标记为蓝色的生成源图标,并且MainParser
现在可以导入了!
答案 5 :(得分:0)
我有类似的问题。 Intellij在java
文件夹中找到了我生成的代码,但未在java
的子文件夹中找到。我通过将我的语法文件(* .g4)放入包(com.test)来解决它:
.
├── src/
| └── main/
| ├── antlr/
| | └── com.test/
| | └── Test.g4
| └── java/
| └── test/
| └── Test.java
└── target/
└── generated-sources/
└── antlr/
└── com.test/
├── TestBaseListener.java
└── ...
答案 6 :(得分:0)