java - IntelliJ 在输入期间编译时将 .class 文件放在哪里

标签 java intellij-idea jrebel intellij-13

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

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

最佳答案

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

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

优点:

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

缺点:

  • 工作量太大了,基本上他们需要重写逻辑来找出 javac 的每一个错误可以产生(这就是为什么你可以在他们的错误跟踪器上找到许多标记为“good code is red”或“错误代码是绿色”的问题,这意味着他们检测到的内容与编译器输出的内容之间存在差异)

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

关于java - IntelliJ 在输入期间编译时将 .class 文件放在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25045621/

相关文章:

java优先级队列没有根据hashmap的频率获得正确的顺序

java - (Float value + Integer value + long value) 如何给出意想不到的结果?

java - 如何测试一个方法及其两个助手之间的交互?

scala - 在IntelliJ IDEA中编译时,Spark SQL没有SparkSqlParser.scala文件

java - Intellij断点报告方法抛出 'java.lang.ClassNotFoundException'异常即使变量存在

java - 正则表达式在运算符之后拆分数学表达式并查找负数

spring 在运行时导入模块在 bean 中被忽略

java - IntelliJ : Why can't I use a class from external jar

java - 使用 spring 4.3 和 JRebel 在 tomcat8 中部署 Java 应用程序时出现异常

java - 如何在 Spring Boot 项目 : 上正确配置 Intellij IDEA 中的 jRebel