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

oil*_*lio 12 intellij-idea antlr4

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

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

我已经尝试过常用的修复程序,例如重新导入maven项目,更新文件夹,使缓存无效等等.似乎没有任何工作.

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

Vla*_*čík 13

问题

target/generated-sources/antlr4不会自动标记为源目录,而是直接子目录com.example.Intellij Idea无法检测到内部类的正确包target/generated-sources/antlr4/com.example.

原因

源文件*.g4src/main/antlr4/com.example,但它实际上应该是src/main/antlr4/com/example.请注意/.你可能忘了src/main/antlr4在Idea中标记为源目录,当你认为你正在创建包结构时,你实际上只是创建了一个名为dir的dir com.example.

修复

标记src/main/antlr4为源目录,创建正确的目录结构src/main/antlr4/com/example.重建.

替代修复

转到项目结构 - 模块 - 源文件夹,然后找到target/generated-sources/antlr4/com.example- 单击编辑属性并将包前缀设置为com.example.


这里有不同但相关的问题


aks*_*618 6

我的问题有点类似于@spilymp\'s

\n\n

*.g4直接将文件放入src/main/antlr4

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src/\n|   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main/\n|       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 antlr/\n|       |   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Main.g4\n|       |   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 imported.g4\n|       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 java/\n|           \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 com/\n|               \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test/\n|                   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Test.java\n
Run Code Online (Sandbox Code Playgroud)\n\n

这导致在default包中生成源代码。我更改了包结构以匹配 java 的包结构:

\n\n
.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src/\n|   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main/\n|       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 antlr/\n|       |   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 com/\n|       |   |   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test/\n|       |   |       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Main.g4            \n|       |   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 imports/\n|       |       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 imported.g4\n|       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 java/\n|           \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 com/\n|               \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test/\n|                   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Test.java\n
Run Code Online (Sandbox Code Playgroud)\n\n

(注意导入需要直接进入src/main/antlr4/imports

\n\n

之后,我只需antlr4从 Maven 菜单([Module] > Plugins > antlr4 > antlr4:antlr4)运行目标,它会在默认位置 ( target/generated-sources/antlr4) 生成源,其中 Intellij 已经用蓝色生成源图标标记了源,MainParser现在可以导入了!

\n


sam*_*oul 5

对我有用的步骤:

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


小智 4

我有我认为可能是类似的问题。我是 IntelliJ 的新手,所以我在某种程度上猜测。

您的项目中的 gen 文件夹是棕色(即资源)还是蓝色(源代码)?

在我设法将 gen 文件夹注册为包含源代码的文件夹之前,我无法让我的项目识别生成的代码。

抱歉,您可能需要摆弄它 - 我不记得我是如何做到的 - 但在我更改此设置后一切都很好。