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)
Maxim Veksler
quelle
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.

Joschi
quelle
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.

Berk
quelle
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
6

Debugger > HotSwapIn Intellij 11 gibt es eine Option.

Pratik Khadloya
quelle
2
Es gibt ein "Eclipse Mode" -Plugin, das genau wie die inkrementelle Hintergrundkompilierung von Eclipse funktioniert.
Pratik Khadloya
1
Guter Kommentar, leider scheint das Plugin nicht mehr gepflegt zu werden plugins.intellij.net/plugin/?id=3822
Maxim Veksler
3
In Intellij 13 verwenden Sie: Datei-> Einstellungen -> (geben Sie HotSwap in das Suchfeld ein)
Ghandhikus
4

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

Geben Sie hier die Bildbeschreibung ein

Yasir Shabbir Choudhary
quelle
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)
Gili
quelle
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

Code-Lehrling
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
Bhanu
quelle