2014-07-25 13 views
5

Ich habe in Java programmiert, und ich genieße wirklich die Funktion in Netbeans und anderen IDEs, mit denen Sie Änderungen an Ihrem Programm während des Debuggens vornehmen können, ohne es neu zu starten. Ich schreibe eine Anwendung in Java, die davon profitieren würde, wenn ich sie im laufenden Betrieb aktualisieren könnte, ohne sie neu starten zu müssen. Ich hatte die Idee, einen zweiten Jar zu haben, den ich ausführen könnte, wenn er aktualisiert wird, was das gleiche machen würde wie die IDEs, aber ich habe keine Ahnung, wie sie den Code austauschen. Kann mich jemand aufklären? Vielen Dank!Wie Hot Code Swapping funktioniert

+0

halte ich würde Lesung [diese] (http://stackoverflow.com/questions/7989135/is -ist-möglich-programmgesteuert-kompilieren-java-Quellcode-im-Speicher-only). So oder so in der akzeptierten Antwort würde wahrscheinlich Ihren Bedürfnissen entsprechen. – ChiefTwoPencils

+1

Werfen Sie einen Blick auf JDWP und speziell [JDI] (http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/architecture.html#jdi). –

Antwort

3

IDEs wie Eclipse verwenden beim Debugging die JDI (Java Debug-Schnittstelle). Es ist eine Sammlung von Java-APIs, mit denen Sie externe Java Virtual Machines erstellen/anhängen können. Dies kann in Verbindung mit einem Java-Agenten verwendet werden, mit dem Klassen in der virtuellen Maschine neu definiert werden können. Was Eclipse während des Debug-Modus tut, ist eine neue virtuelle Maschine mit Ihrem Code zu erstellen. Wenn Sie eine Bearbeitung vornehmen und neu kompilieren; Eclipse weist dann die JVM an, die Klassen, die Sie geändert haben, neu zu definieren, indem Sie den neuen Byte-Code senden.

Sie können die JDI documentation lesen, und werfen Sie einen Blick auf die Java instrument class (die verwendet wird, um eine Klasse-Transformator konfigurieren) insbesondere. Hier ist eine verwandte Frage zu setting up a JDI launcher (Starten einer neuen JVM).