Как включить замену горячего кода 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.