Как включить замену горячего кода Intellij


80

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 (ознакомительная)

Я никогда не слышал о горячей замене для приложений командной строки, только для веб-приложений.
— duffymo

11
Исходя из eclipse, который делает это, я ожидал, что intellij тоже сможет это сделать. Я что-то упускаю?
— Максим Векслер

Я также столкнулся с множеством проблем с этим, а затем я узнал, что если вы используете виртуальную
— машину

Ответы:


103

После сохранения вашего класса во время ожидания точки останова просто перекомпилируйте свой класс Build -> Compile 'MainTest.java'или нажмите Ctrl+Shift+F9со стандартными привязками клавиш.

Затем IntelliJ IDEA покажет небольшое диалоговое окно, в котором вас спросят, хотите ли вы перезагрузить этот класс.


6
Большое спасибо. Могу ли я сделать автоматическую компиляцию intellij? (гораздо лучше было бы позволить: сохранять без автоматической компиляции, а затем включать компиляцию по требованию по умолчанию).
— Максим Векслер


Большое спасибо, искал это много времени!
— Симха

Большое количество ошибок компиляции во время отладки перед горячей заменой. Пакеты не найдены.
— Sunnyday

@Sunnyday Это было исправлено в IntelliJ IDEA 2019.1: youtrack.jetbrains.com/issue/IDEA-163187
— joschi,

26

После изменений, указанных ниже, и включения «горячей» замены изменение файла Java заняло 1-2 секунды времени перезапуска. (Начальное время запуска для меня составляет около 7 секунд).

Надеюсь, метод ниже поможет ...


Во-первых, вам нужно установить флажок «Создавать проект автоматически» в меню настроек.

Открыть меню настроек;

вы можете перейти в верхнее меню и щелкнуть;

IntelliJ IDEA -> Настройки

или вы можете ввести ниже ярлык с клавиатуры;

cmd + option + s

Затем вы можете проверить, Make project automaticallyкак показано на рисунке ниже;

введите описание изображения здесь

Во-вторых, вам нужно изменить compiler.automake.allow.when.app.runningпараметр реестра как истинный.

Чтобы открыть реестр, вам нужно нажать ниже сочетание клавиш:

cmd + shift + a

Введите, registryкак показано на рисунке ниже, выберите Registryи нажмите кнопку ввода на клавиатуре;

введите описание изображения здесь

После Registryоткрытия окна введите, compiler.automakeчтобы увидеть compiler.automake.allow.when.app.runningвариант, и отметьте его, как показано на рисунке ниже;

введите описание изображения здесь

Затем вам нужно перезапустить IntelliJ, чтобы изменения в реестре работали.


2
HotSwap у меня работает, когда я отлаживаю приложение, а затем создаю проект или просто компилирую файл. Однако он не работает при сохранении даже после выполнения указанных выше настроек реестра. Это потому, что я нахожусь в режиме отладки, а не запускаю?
— DKroot

2
@DKroot, да - в IntelliJ вы должны быть в режиме отладки, чтобы горячая замена работала.
— J

7

В Debugger > HotSwapintellij 11 есть опция.


2
Существует плагин «Eclipse Mode», который работает точно так же, как фоновая инкрементная компиляция eclipse.
— Pratik Khadloya

1
Хороший комментарий, к сожалению, плагин больше не поддерживается plugins.intellij.net/plugin/?id=3822
— Максим Векслер,

3
В intellij 13 используйте: File-> Settings -> (введите HotSwap в поле поиска)
— Ghandhikus

4

Перейдите в Настройки -> Выбрать отладку -> HotSwap

введите описание изображения здесь


1
Даже при использовании этого мне все равно приходится вручную инструктировать intelliJ перекомпилировать. Это немного упрощает задачу, потому что вам не нужно отвечать на вопрос, хотите ли вы перезагрузить классы.
— Хенно Вермёлен

3

Я хотел, чтобы горячая замена запускалась автоматически каждый раз, когда я сохраняю файл 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файл, либо в новый файл * .conf (например idea.conf) в /etc/sysctl.d/каталоге:

    fs.inotify.max_user_watches = 524288
    
  2. Затем запустите эту команду, чтобы применить изменение:

    sudo sysctl -p --system

Теперь мои компоненты React перестраиваются и меняются в горячем режиме.

Источник


У меня похожая проблема. однако это (увеличение наблюдателя за файлами) мне не помогло.
— Rejeev Divakaran

0

Я думаю, вы спрашиваете об этом,

  1. Щелкните правой кнопкой мыши свой класс java
  2. Выберите " Скомпилировать и перезагрузить файл"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.