如何启用Intellij热代码交换


79

Intellij在我的安装中似乎没有进行基本的热代码交换。

对于此代码:

public class MainTest {
    public void method1() {
        System.out.println("Breakpoint here");
    }

    public void method2() {
        System.out.println("Line that will get 24 modified");
    }

    public static void main(String[] args) {
        System.out.println("First print here");
        MainTest mainTest = new MainTest();
        mainTest.method1();
        mainTest.method2();
        System.out.println("Line that I do not modify");
    }
}

我在上面设置了一个断点,mainTest.method1();然后在method2()处修改了字符串,按ctrl + s并继续逐步进行操作。不幸的是,运行时未更新,正在打印旧字符串。句号-编译-运行不会打印新字符串。所以我的结论是热插拔不​​起作用。

我需要进行任何设置来启用热代码交换吗?

  • Ubuntu,JDK 1.6
  • Intellij 10.5 Ultimate(评估)

我从未听说过仅针对Web应用程序进行命令行应用程序热交换。
duffymo 2011年

11
来自eclipse,我希望intellij也能够做到这一点。我想念什么吗?
Maxim Veksler 2011年

与此同时

Answers:


102

在等待断点之后保存类后,只需使用Build -> Compile 'MainTest.java'或按Ctrl+Shift+F9标准键绑定重新编译您的类。

然后,IntelliJ IDEA将显示一个小对话框,询问您是否要重新加载该类。


6
十分感谢。我可以自动编译intellij吗?(更好的功能是允许:不进行自动编译即可保存,然后默认情况下启用按需编译)。
Maxim Veksler 2011年


非常感谢,为此花了很多时间!
Simcha

热插拔之前的调试过程中出现许多编译错误。找不到软件包。
Sunnyday

@Sunnyday此问题已在IntelliJ IDEA 2019.1中修复:youtrack.jetbrains.com/issue/IDEA-163187
joschi

24

经过以下修改并启用热插拔后,对Java文件的更改花费了1-2秒的重启时间。(对于我而言,初始开始时间约为7秒)。

我希望下面的方法可以帮助...


首先,您需要在首选项菜单中选中“自动创建项目”。

打开首选项菜单;

您可以转到顶部菜单并单击;

IntelliJ IDEA->首选项

或者您可以通过键盘在快捷方式下面输入;

cmd +选项+ s

然后,您可以检查Make project automatically如下图;

在此处输入图片说明

其次,您需要将compiler.automake.allow.when.app.running注册表设置修改为true。

要打开注册表,您需要单击下面的键盘快捷键:

cmd + Shift + A

registry如下图所示键入,选择Registry,然后按键盘的Enter键;

在此处输入图片说明

Registry打开窗口后,键入compiler.automake以查看compiler.automake.allow.when.app.running选项,然后如下图所示进行检查;

在此处输入图片说明

然后,您需要重新启动IntelliJ才能使注册表更改生效。


2
当我调试应用程序然后构建项目或仅编译文件时,HotSwap为我工作。但是,即使完成了上面的注册表设置,它也无法保存。是因为我处于调试状态而不是运行状态?
DKroot

2
@DKroot,是的-在IntelliJ中,您必须处于调试模式才能使热插拔正常工作。
J Woodchuck


4

转到设置->选择调试->热插拔

在此处输入图片说明


1
即使使用此功能,我仍然必须手动指示智能重新编译。这确实使它变得容易一些,因为您不必回答是否要重新加载类的问题。
Henno Vermeulen

3

我希望hotswap在每次保存Java文件时自动运行。其他答案都没有这样做,所以我只是:

  1. 创建了一个将在保存时运行的宏:https : //stackoverflow.com/a/5581992/14731
  2. Action: Hotswap在宏(Run -> Reload Changed Classes)的末尾添加

2

对于遇到与我相同的问题的任何人,您可能会遇到以下近期错误,影响了2020.2更新https : //youtrack.jetbrains.com/issue/IDEA-247530 ? _ga = 2.116305920.729836936.1599654650-984156210.1599654650

TL; DR作为解决方法,您需要重新激活Groovy插件。


0

我在Ubuntu上遇到了这个问题。我还遇到了一个显然无关的问题,其中IntelliJ给出了有关文件监视限制的错误(我很抱歉,我不再拥有确切的错误消息)。为了解决此以后的问题,我执行了以下步骤:

  1. /etc/sysctl.conf将以下行添加到文件或目录idea.conf下的新* .conf文件(例如)中/etc/sysctl.d/

    fs.inotify.max_user_watches = 524288
    
  2. 然后运行以下命令以应用更改:

    sudo sysctl -p-系统

现在我的React组件可以重建和热插拔了。

资源


我有类似的问题。但是,这个(增加文件监视程序)并没有帮助我。
Rejeev Divakaran

0

我想你是在问这个

  1. 右键单击您的Java类
  2. 选择编译并重新加载文件
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.