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

时间:2014-07-30 19:45:47

标签: java intellij-idea jrebel intellij-13

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

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

5 个答案:

答案 0 :(得分:5)

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

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

优点:

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

缺点:

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

在编译后,只需添加类(如果它是Maven项目)就存储在target目录中;否则,该目录在IntelliJ的项目结构中的“项目编译器输出”中指定:

enter image description here

答案 4 :(得分:0)

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