Як увімкнути гарячу заміну коду 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
Виходячи із затемнення, яке робить це, я очікував би, що 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і натисніть клавішу Enter на клавіатурі;

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

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

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

Потім вам потрібно перезапустити IntelliJ, щоб зміни реєстру працювали.


2
HotSwap працює для мене, коли я налагоджую програму, а потім будую проект або просто компілюю файл. Однак це не працює при збереженні навіть після того, як було зроблено вище налаштування реєстру. Це тому, що я перебуваю у Налагодженні і не запускаю?
— DKroot

2
@DKroot, так - в IntelliJ ви повинні бути в режимі налагодження, щоб гаряча заміна працювала.
— Дж

7

Є Debugger > HotSwapваріант в intellij 11.


2
Існує плагін "Eclipse Mode", який працює точно так само, як додаткова компіляція фону eclipse.
— Пратік Хадлоя

1
Гарний коментар, на жаль, плагін, схоже, більше не підтримується. Plural.intellij.net/plugin/?id=3822
— Максим Векслер

3
В Intellij 13 використання: Файл-> Налаштування -> (введіть HotSwap у полі пошуку)
— Ghandhikus

4

Перейдіть до Налаштування -> Виберіть Налагодження -> Гаряча заміна

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


1
Навіть використовуючи це, мені все одно доводиться вручну вказувати intelliJ перекомпілювати. Це робить це дещо простішим, тому що вам не потрібно відповідати на питання, чи хочете ви перезавантажити класи.
— Henno Vermeulen,

3

Я хотів, щоб hotswap автоматично запускався кожного разу, коли я зберігав файл Java. Жодна з інших відповідей не робила цього, тому я просто:

  1. Створено макрос, який буде працювати при збереженні: https://stackoverflow.com/a/5581992/14731
  2. Додано Action: Hotswapв кінці макросу ( Run -> Reload Changed Classes)


0

Я зіткнувся з цією проблемою в Ubuntu. У мене також була очевидно непов'язана проблема, коли IntelliJ видав помилку про ліміт перегляду файлів (вибачаюся, що більше не маю точного повідомлення про помилку). Щоб вирішити цю пізнішу проблему, я зробив наступні кроки:

  1. Додайте наступний рядок до /etc/sysctl.confфайлу або до нового файлу * .conf (наприклад idea.conf) у /etc/sysctl.d/каталозі:

    fs.inotify.max_user_watches = 524288
    
  2. Потім запустіть цю команду, щоб застосувати зміни:

    sudo sysctl -p --система

Тепер мої компоненти React відновлюються та гаряча заміна просто чудова.

Джерело


У мене схоже питання. однак це (посилення перегляду файлів) мені не допомогло.
— Реджеєв Дівакаран

0

Я думаю, ви про це питаєте,

  1. Клацніть правою кнопкою миші на своєму класі Java
  2. Виберіть Компілювати та перезавантажити файл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.