5

IntelliJ 是否一直在编译,因为它会在出现错误时用红色波浪线告诉我?(除了自动完成功能)还是在做某种伪编译?

如果它在做合法的编译,它把这些编译的类放在哪里?我想将我的 JRebel 指向该目录而不是单个模块目标文件夹。

4

5 回答 5

7

Meo 是对的,从我为自定义语言开发插件时学到的知识,IntelliJ 不会编译任何东西,直到你明确地制作你的项目。在您键入时,它的词法分析器/解析器会检测到任何无效的标记或代码结构。同时,它维护项目中每个类和方法及其依赖项的索引,以及它们的签名等。

停止输入后,您会在右侧装订线的顶部看到一个彩色的小眼睛。它表明 IDE 正在运行“注释器”和“代码检查”。他们能够根据当前索引和文件的当前状态(导入、声明等)判断类、方法和变量是否有效。未使用的变量、方法调用中的无效参数等也是如此。

优点:

  • 注释器直接在他们所谓的 PSI 树上工作,这基本上是代表您当前文件的增强 AST
  • 每次编译可能会更快(它使用索引并且不需要重新编译每个依赖类)
  • 注释器可以检测到javac不关心的事情,例如潜在的错误(例如使用=而不是==while条件中)

缺点:

  • 这是一项繁重的工作,基本上他们需要重写逻辑以找到javac可能产生的每个错误(这就是为什么您可以在他们的 bugtracker 上找到许多标有“好代码是红色”或“坏代码是绿色”的问题,这意味着有它们检测到的内容与编译器输出的内容之间的差异)

TL;DR:在你制作项目之前它不会产生任何.class东西,一切都是“手工”完成的

于 2014-07-31T18:31:21.103 回答
4

对于每个模块,可以从Module Settings的Paths选项卡中找到编译器输出路径。JRebel 插件自动生成 rebel.xml 并从Module Settings派生目录路径,因此您无需手动指向位置 - 只需使用 IDE 插件生成 rebel.xml:在项目视图中右键单击模块 -> JRebel - >> 生成 rebel.xml

于 2014-07-31T06:04:31.593 回答
3

target只是要补充一点,编译后,如果是 Maven 项目,类将存储在目录中 - 否则,该目录在 IntelliJ 的项目结构中指定,在“项目编译器输出”中:

在此处输入图像描述

于 2018-10-06T17:13:16.250 回答
2

IntelliJ 理解代码,它不需要编译代码就知道出了什么问题。

于 2014-07-30T20:00:50.447 回答
0

我通过从项目的主目录转到 out/production/main 文件夹找到了我的 .class 文件。

于 2014-07-30T19:55:37.677 回答