So aktivieren Sie den Intellij Hot Code Swap


79

Intellij scheint bei meiner Installation keinen grundlegenden Hot-Code-Austausch durchzuführen.

Für diesen Code:

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

Ich setze einen Haltepunkt auf mainTest.method1();, ändere dann die Zeichenfolge bei method2 (), drücke Strg + s und fahre Schritt für Schritt fort. Leider wird die Laufzeit nicht aktualisiert, alte Zeichenfolge wird gedruckt. Full Stop - Compile - Run druckt die neue Zeichenfolge. Mein Fazit ist also, dass Hot-Swap nicht funktioniert.

Muss ich Einstellungen vornehmen, um den Hot-Code-Austausch zu aktivieren?

  • Ubuntu, JDK 1.6
  • Intellij 10.5 Ultimate (Bewertung)

Ich habe noch nie von Hot-Swap für Befehlszeilen-Apps gehört, nur für Web-Apps.
Duffymo

11
Wenn ich von Eclipse komme, was dies tut, würde ich erwarten, dass Intellij dies auch kann. Vermisse ich etwas
Maxim Veksler

Ich hatte auch viele Probleme damit, und dann habe ich erfahren, dass wenn Sie VM verwenden - dann funktioniert Hot Swap nicht
Ashish Shetkar

Antworten:


102

Nachdem Sie Ihre Klasse gespeichert haben, während Sie auf Ihren Haltepunkt warten, kompilieren Sie Ihre Klasse einfach mit Build -> Compile 'MainTest.java'oder drücken Sie Ctrl+Shift+F9mit den Standardtastenbindungen.

IntelliJ IDEA zeigt dann einen kleinen Dialog an, in dem Sie gefragt werden, ob Sie diese Klasse neu laden möchten.


6
Vielen Dank. Kann ich Intellij automatisch kompilieren lassen? (Eine viel bessere Funktion wäre, Folgendes zuzulassen: Speichern ohne automatische Kompilierung, dann standardmäßig das Kompilieren bei Bedarf aktivieren).
Maxim Veksler


Vielen Dank, habe viel Zeit dafür gesucht!
Simcha

Viele Kompilierungsfehler beim Debuggen vor dem Hot-Swap. Pakete nicht gefunden.
Sonnentag

@Sunnyday Dies wurde in IntelliJ IDEA 2019.1 behoben: youtrack.jetbrains.com/issue/IDEA-163187
joschi

24

Nach den folgenden Änderungen und dem Aktivieren des Hot-Swap dauerte eine Änderung in einer Java-Datei 1-2 Sekunden nach dem Neustart. (Die anfängliche Startzeit beträgt für mich ungefähr 7 Sekunden).

Ich hoffe unten Methode hilft ...


Zuerst müssen Sie im Einstellungsmenü die Option „Projekt automatisch erstellen“ aktivieren.

Einstellungsmenü öffnen;

Sie können zum Hauptmenü gehen und auf klicken.

IntelliJ IDEA -> Einstellungen

oder Sie können die folgende Verknüpfung über die Tastatur eingeben.

cmd + Option + s

Dann können Sie Make project automaticallywie im Bild unten überprüfen ;

Geben Sie hier die Bildbeschreibung ein

Zweitens müssen Sie die compiler.automake.allow.when.app.runningRegistrierungseinstellung als true ändern .

Um die Registrierung zu öffnen, müssen Sie auf die folgende Tastenkombination klicken:

cmd + shift + a

Geben Sie registrywie im Bild unten ein, wählen Sie Registrydie Eingabetaste der Tastatur aus und drücken Sie die Eingabetaste.

Geben Sie hier die Bildbeschreibung ein

Nach RegistryFenster geöffnet, geben Sie, compiler.automakeum zu sehen compiler.automake.allow.when.app.runningOption, und überprüfen Sie es wie im Bild unten;

Geben Sie hier die Bildbeschreibung ein

Anschließend müssen Sie IntelliJ neu starten, damit die Registrierungsänderungen funktionieren.


2
HotSwap funktioniert für mich, wenn ich die Anwendung debugge und dann das Projekt erstelle oder einfach eine Datei kompiliere. Das Speichern funktioniert jedoch auch dann nicht, wenn die oben genannten Registrierungseinstellungen vorgenommen wurden. Liegt es daran, dass ich im Debug bin und nicht laufe?
DKroot

2
@DKroot, ja - in IntelliJ müssen Sie sich im Debug-Modus befinden, damit Hot-Swap funktioniert.
J Woodchuck


4

Gehen Sie zu Einstellungen -> Wählen Sie Debug -> HotSwap

Geben Sie hier die Bildbeschreibung ein


1
Selbst wenn ich dies benutze, muss ich IntelliJ manuell anweisen, neu zu kompilieren. Dies macht es ein bisschen einfacher, da Sie die Frage nicht beantworten müssen, ob Sie die Klassen neu laden möchten.
Henno Vermeulen

3

Ich wollte, dass Hotswap jedes Mal automatisch ausgeführt wird, wenn ich eine Java-Datei speichere. Keine der anderen Antworten hat dies getan, also habe ich nur:

  1. Erstellt ein Makro, das beim Speichern ausgeführt wird: https://stackoverflow.com/a/5581992/14731
  2. Action: HotswapAm Ende des Makros hinzugefügt ( Run -> Reload Changed Classes)


0

Ich habe dieses Problem unter Ubuntu festgestellt. Ich hatte auch ein anscheinend nicht verwandtes Problem, bei dem IntelliJ einen Fehler bezüglich des Limits für die Dateiüberwachung gab (ich entschuldige mich, dass ich nicht mehr die genaue Fehlermeldung habe). Um dieses spätere Problem zu lösen, habe ich die folgenden Schritte ausgeführt:

  1. Fügen Sie die folgende Zeile entweder zu einer /etc/sysctl.confDatei oder zu einer neuen * .conf-Datei (z. B. idea.conf) im /etc/sysctl.d/Verzeichnis hinzu:

    fs.inotify.max_user_watches = 524288
    
  2. Führen Sie dann diesen Befehl aus, um die Änderung zu übernehmen:

    sudo sysctl -p --system

Jetzt werden meine React-Komponenten neu erstellt und im laufenden Betrieb ausgetauscht.

Quelle


Ich habe ein ähnliches Problem. Dies (zunehmender File Watcher) hat mir jedoch nicht geholfen.
Rejeev Divakaran

0

Ich denke, Sie fragen danach,

  1. Klicken Sie mit der rechten Maustaste auf Ihre Java-Klasse
  2. Wählen Sie Datei kompilieren und neu laden
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.