Intellij IDEA Java类不会在保存时自动编译

mom*_*omo 165 java intellij-idea java-ee jrebel

昨天我从Eclipse切换到了Intellij.

我也在使用jRebel和Websphere Server 7.

现在一切似乎都工作得很好,除了当我修改 Java文件并点击保存时,Intellij 不会重新编译该文件,以便jRebel获取它.

日食" 自动构建 "功能解决了这个问题.

在Intellij中,我必须按CTRL + SHIFT + 9重新编译jRebel的相关类才能获取它.如果在两个文件之间进行了更改,我必须在每个文件上执行此操作,因为Intellij使用了save all机制,所以很难知道手动重新编译的内容,我也不感兴趣.

难道没有办法让Intellij独自完成这项工作吗?

dan*_*dan 229

更新
对于IDEA 12+版本,如果我们使用外部编译器选项,我们可以自动构建已编辑的源代码.唯一需要的是检查"编译器设置"下的"自动构建项目"选项. 编译器设置 此外,如果您希望热部署,在应用程序运行时或者如果您使用的是Spring boot devtools,则还应启用compiler.automake.allow.when.app.runningfrom注册表.这将自动编译您的更改.

在注册表窗口打开后,使用ctrl+ shift+ A(或mac上的+ shift+ A)类型Registry,找到并启用compiler.automake.allow.when.app.running,请参见此处: 在此输入图像描述


对于12以上的版本,您可以使用EclipseMode插件使IDEA自动编译保存的文件.有关从Eclipse迁移时的更多提示,请参阅:https://www.jetbrains.com/help/idea/2016.3/eclipse.html.

  • "自动生成项目"仅在未运行/调试时有效 (33认同)
  • 这很慢.这太慢了.还有很大的提升空间!我不是它在后台做的事情,但它需要Intellij大约3-4秒才能在一个单独的类中编译一个小的变化.甚至"编译'StartController.java'"意味着一个类只需要3-4秒.Eclipse在不到100毫秒的时间内完成了这项工作.我将再次测试eclipse模式插件并确定要使用的内容.. (9认同)
  • 觉得我必须为此安装一个插件很烦人.我昨天和今天已经花了这个.我希望他们可以为此建立一个选项,我不认为Eclipse有关于此功能的专利,是吗?我也可以重新映射到CTRL + S来自动保存.我会尝试几种选择.谢谢 (8认同)
  • 使用Intellij 2017.1.3和spring boot devtools对我不起作用. (8认同)
  • 2020.4 不起作用。嘿,这是我的问题!刚刚发现。哈哈...我想又回到这里了。 (3认同)

sno*_*lli 73

请遵循以下两个步骤:

1 - 从编译器启用Automake

  • 按:ctrl+ shift+ A(适用于Mac + shift+ A)
  • 类型: make project automatically
  • 击中: Enter
  • 启用Make Project automatically功能

2 - 在应用程序运行时启用Automake

  • 按:ctrl+ shift+ A(适用于Mac + shift+ A)
  • 类型: Registry
  • 找到密钥compiler.automake.allow.when.app.running启用它,单击旁边的复选框

注意:立即重启您的应用程序:)

注意:这也应允许使用spring boot devtools进行实时重新加载.

  • 这对我来说也适用于spring-boot-devtools和IntelliJ IDEA 2016.2.5 (3认同)
  • 完美,这正是我所寻找的=) (2认同)
  • 是的,所以这似乎适用于IntelliJ 2017.1.3,我使用选项2,因为这是弹簧启动devtools所需要的. (2认同)
  • 效果很好,但在 JRebel 中重新加载需要 4-5 秒。有什么办法吗? (2认同)

Cra*_*der 66

警告

Eclipse Mode插件已过时,与最近的IDEA 12+版本不兼容.如果您安装它,IDE将在每次更改文件时挂起,并且响应速度极慢.


IntelliJ IDEA不使用自动构建,它会动态检测错误,而不是通过编译器.类似于Eclipse模式将在IDEA 12中提供:

自动创建项目

使用Build| Make,它调用增量make进程,该进程只编译已更改的和依赖的文件(速度非常快).

还有一个FAQ条目可能有所帮助.

更新自动make功能:运行/ debug配置运行时,Make project automatically无效.磁盘上的类只会在Build| 上更改 Make.这是核心设计决策,因为在我们看来,磁盘上的类更改应该始终在用户的控制之下.自动make不是Eclipse功能的模板,它的工作方式不同,它的主要目的是节省等待类真正需要时(在运行应用程序或测试之前)的时间.自动make不会替换您仍然需要触发的显式编译,就像在本问题中描述的情况一样.如果您正在寻找不同的行为,那么在上面的FAQ中链接的EclipseMode插件将是更好的选择.

  • 我已经尝试了12天.使用外部构建 - > make自动不会触发任何动作.没什么好开心的.当我使用eclipse模式插件(从设置启用/禁用它)工作正常,但当我禁用eclipse模式插件并启用"使用外部构建 - >自动make"时,编辑和保存没有任何反应...任何想法为什么? (3认同)
  • @CrazyCoder我刚回到这和jRebel。这太慢了。有很大的改进空间!我不是它在后台执行的操作,但是Intellij大约需要3-4秒才能在一个类中编译一个小的更改。即使是“ Compile'StartController.java'”,也意味着一个类只需要3-4秒。Eclipse在不到100毫秒的时间内完成了此操作。我将再次测试插件,然后决定要使用什么。 (2认同)

Dan*_*lan 36

您可以通过键盘映射ctrl+s一步保存和编译.转到键盘设置并搜索Compile.

  • 谢谢,我最喜欢!intellij中的自动编译,以及这个,但至少我看到它现在完成,太慢了. (3认同)

小智 14

我最后录制了一个来保存和编译一步,并键盘映射Ctrl+s到它.

  • @SecretService可能不适合所有人,因为当多个操作映射到同一个快捷方式时,未定义操作顺序. (5认同)

and*_*uso 14

实际上没有区别,因为两者都需要1次点击:

  • Eclipse:手动保存,自动编译.
  • IntelliJ:自动保存,手动编译.

最简单的解决方案就是习惯它.因为当你在IDE中花费大部分时间时,最好在一个人中养成快速习惯,而不是在其中一些习惯中放慢习惯.

  • 有办法改进IntelliJ体验:切换到浏览器时保存和编译 (2认同)
  • 习惯一个IDE为我做而另一个IDE不为我做的事情,这使我的生活更加困难,这不是一个好卖点。 (2认同)

小智 10

我设法使用宏来解决这个问题.

我开始录制一个宏:

  • 单击编辑 - 宏 - 开始宏录制
  • 单击文件 - 全部保存
  • 单击构建 - 生成项目
  • 单击编辑 - 宏 - 停止宏录制

将它命名为"SaveAndMake".

现在只需删除Save all keybinding,并将相同的键绑定添加到宏中!

所以现在,每次我保存,它都会保存并进行脏编译,jRebel现在可以正确检测所有更改.


Aja*_*mar 5

请仔细按照以下步骤启用它.

1)使用SB V1.3创建Spring Boot项目,并将"Devtools"(1*)添加到依赖项

2)调用Help-> Find Action ...并输入"Registry",在对话框中搜索"automake"并启用条目" compiler.automake.allow.when.app.running ",关闭对话框

3)在设置 - >构建,执行,部署 - >编译器"自动生成项目"中启用后台编译

4)打开Spring Boot运行配置,如果一切配置正确,你应该收到警告信息

5)运行您的应用程序,即时更改您的课程

请将您的经历和问题报告为此问题的评论.

点击这里获取更多信息