95

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");
    }
}

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

我需要设置什么设置来启用热代码交换吗?

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

8 回答 8

122

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

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

于 2011-06-19T12:21:36.557 回答
32

在进行以下修改并启用热交换后,Java 文件的更改需要 1-2 秒的重启时间。(对我来说,初始开始时间约为 7 秒)。

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


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

打开首选项菜单;

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

IntelliJ IDEA -> 首选项

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

cmd + 选项 + s

然后,您可以Make project automatically如下图所示进行检查;

在此处输入图像描述

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

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

cmd + shift + a

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

在此处输入图像描述

Registry窗口打开后,输入compiler.automake查看compiler.automake.allow.when.app.running选项,如下图所示;

在此处输入图像描述

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

于 2016-12-29T10:21:57.677 回答
8

intellij 11 中有一个Debugger > HotSwap选项。

于 2012-08-23T22:55:53.177 回答
6

转到设置->选择调试-> HotSwap

在此处输入图像描述

于 2016-08-19T05:10:27.457 回答
4

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

  1. 创建了一个将在保存时运行的宏:https ://stackoverflow.com/a/5581992/14731
  2. Action: Hotswap在宏末尾添加( Run -> Reload Changed Classes)
于 2019-01-19T19:49:23.360 回答
3

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

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

于 2020-09-10T09:56:10.650 回答
3

我想你是在问这个,

  1. 右键单击您的 java 类
  2. 选择编译并重新加载文件
于 2020-11-03T11:26:16.980 回答
0

我在 Ubuntu 上遇到了这个问题。我还有一个明显不相关的问题,IntelliJ 给出了关于文件监视限制的错误(我很抱歉我不再有确切的错误消息)。为了解决这个后来的问题,我做了以下步骤:

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

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

    sudo sysctl -p --system

现在我的 React 组件重建和热交换就好了。

资源

于 2018-02-01T16:51:45.137 回答