Як увімкнути гарячу заміну коду 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.