IntelliJ在打字时编译时将.class文件放在哪里

Car*_*cas 4 java intellij-idea jrebel intellij-13

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

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

Bas*_*sen 6

Meo是对的,根据我在为自定义语言开发插件时所学到的,IntelliJ在您明确制作项目之前不会编译任何内容.在键入时,其词法分析器/解析器会检测到任何无效的令牌或代码构造.与此同时,它维护项目中每个类和方法的索引及其依赖关系,以及它们的签名等.

在您停止打字后,您会在右侧排水沟的顶部看到一个小小的眼睛.它表示IDE正在运行"注释器"和"代码检查".他们能够根据当前索引和文件的当前状态(导入,声明等)判断类,方法和变量是否有效.对于未使用的变量,方法调用中的无效参数等也是如此.

优点:

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

缺点:

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

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


Ant*_*pov 5

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