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
Antwort
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).
Ich habe heute über die gleiche Sache @work heute gelernt. Ich fand ziemlich dieser Artikel hilfreich für das Verständnis der Workflow hinter einigen der komplizierteren hotpush Fällen:
http://java.dzone.com/articles/5-jrebel-features-you-couldn%E2%80%99t
- 1. Code Hot Swapping in Erlang
- 2. JVM HOT Swapping
- 3. Erweiterter Code Hot Swapping in JDK 8?
- 4. Hot Loader duplizieren Code (n-mal) anstelle von Hot-Swapping
- 5. Welche Programmiersprachen unterstützen Hot-Code-Swapping und/oder Sandboxing?
- 6. Web-App mit clojure mit Hot-Swapping von Code
- 7. Hot Code Laden in Haskell
- 8. cordova-hot-Code-Push funktioniert nicht
- 9. Swapping VBA-Code für Python
- 10. Wie funktioniert das XOR-Variablen-Swapping?
- 11. Wie deaktiviere ich Hot Code Replace in Eclipse
- 12. Hot-Code ersetzen Fehlgeschlagen (Eclipse)
- 13. Unterstützt Dalvik (Android JVM) Hot Code ersetzen?
- 14. Hot Code Swap in Android Studio mit libgdx
- 15. Matlab swapping
- 16. Implementieren Hot-Code-Swap für Dalvik
- 17. Hot-Code-Bereitstellung Tomcat mit Maven
- 18. cordova-hot-code-push nicht bereitstellen
- 19. React-native hot loading funktioniert nicht
- 20. 'Hot code replace' funktioniert nicht - Eclipse ändert keinen Code auf JBoss
- 21. Webpack dev Server hot-Modus nicht funktioniert
- 22. Swapping-Funktion c
- 23. C++ Swapping Pointers
- 24. Swapping 2 HTML Tabellenelemente
- 25. Gibt es eine Möglichkeit Code zu re-factor swapping Integer
- 26. Swapping Spaltenwerte in MySQL
- 27. Line Swapping in Vim
- 28. deaktivieren Hot-Code ersetzen für den Eclipse-Java-Debugger
- 29. Mac OS X View Swapping
- 30. Wie funktioniert dieser Code?
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
Werfen Sie einen Blick auf JDWP und speziell [JDI] (http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/architecture.html#jdi). –