Intellij不会识别antlr生成的源代码

时间:2014-09-17 23:51:58

标签: intellij-idea antlr4

我无法让Intellij识别出来自antlr4的源代码。对生成的代码的任何引用都显示为错误,代码完成不起作用等。

我正在使用maven和antlr4-maven-plugin来生成代码。 我的代码,引用生成的代码编译并在maven下构建良好。 生成的代码在/ target / generated-sources / antlr4下,这是Intellij所期望的。

我已经尝试了常用的修复程序,例如重新导入maven项目,更新文件夹,使缓存无效等等。它们似乎都无法正常工作。

之前有人见过吗? 有没有办法直接在Intellij中指向生成的源?

7 个答案:

答案 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)

对我有用的步骤:

  1. 在右侧标签
  2. 中打开 Maven项目
  3. 右键单击包含我的antlr代码的模块
  4. 点击生成源和更新文件夹

答案 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)

解决此问题的最简单方法是右键单击gen目录并选择Mark Directory as -> Sources Root

enter image description here