【问题标题】:Intellij will not recognize antlr generated source codeIntellij 将无法识别 antlr 生成的源代码
【发布时间】:2014-11-12 04:07:30
【问题描述】:

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

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

我已经尝试过常见的修复方法,例如重新导入 maven 项目、更新文件夹、使缓存无效等。似乎都不起作用。

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

【问题讨论】:

    标签: intellij-idea antlr4


    【解决方案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 菜单 ([Module] > Plugins > antlr4 > antlr4:antlr4) 运行 antlr4 目标,它在默认位置 (target/generated-sources/antlr4) 生成源,它们已经被标记带有蓝色的 Intellij 生成源图标,现在可以导入 MainParser

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        问题

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

        原因

        源文件*.g4src/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

        【讨论】:

          【解决方案4】:

          我遇到了类似的问题。 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
                          └── ...
          

          【讨论】:

            【解决方案5】:

            对我有用的步骤:

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

            【讨论】:

            • 嘿,这真的有效!谢谢。 generated-sources 文件夹被标记为生成的源根目录,目标文件夹的其余部分仍然被忽略。完美。
            • 这是为我解决问题的那个!谢谢
            【解决方案6】:

            事实证明,我对偏好的摆弄导致了这个问题。如果其他人有这个问题:

            正如 v0rl0n 所述,首先确保将 gen 文件夹列为源。转到模块设置 -> 模块 -> 来源
            向右看蓝色的源文件夹。确保列出了您生成的源文件夹(它们的行上应该有 [generated] 标志)。

            如果那里列出了您生成的源目录,但仍然无法识别,请转到首选项 -> 文件类型。查看忽略文件和文件夹字段。确保没有列出任何与生成的源目录匹配的内容。

            就我而言,我已将 target 添加到此列表中,这导致了我的问题,而且很难找到。

            【讨论】:

              【解决方案7】:

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

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

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

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

              【讨论】:

              • 是的,我以前也遇到过这个问题。单击所有正常按钮通常可以使其正常工作。所有正常的按钮是:Maven 编译、重新导入项目、生成源、使缓存无效、重新启动 IDEA。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2018-05-17
              • 1970-01-01
              • 2018-02-25
              • 2018-03-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多