Ho programmato in Java e mi piace molto la funzionalità di Netbeans e altri IDE che consente di apportare modifiche al programma durante il debug senza doverlo riavviare. Sto scrivendo un'applicazione in Java che sarebbe utile se potessi aggiornarlo al volo senza doverlo riavviare. Ho avuto l'idea di avere un secondo jar che potrei eseguire quando aggiornato, che sarebbe in grado di fare la stessa cosa che fanno gli IDE, ma non ho idea di come si scambiano il codice. Qualcuno può illuminarmi? Grazie!Funzionamento del codice hot swapping
risposta
IDE come Eclipse, quando il debug utilizza la JDI (interfaccia di debug Java). Si tratta di una raccolta di API Java che consentono di creare/collegare su Java Virtual Machines esterne. Questo può essere utilizzato in combinazione con un agente Java che può essere utilizzato per ridefinire le classi nella macchina virtuale. Che cosa fa Eclipse durante la modalità di debug è creare una nuova macchina virtuale con il codice in esecuzione al suo interno. Quando esegui una modifica e ricomponi; eclipse quindi dice alla JVM di ridefinire le classi che sono state cambiate, inviando il nuovo byte-code.
È possibile leggere il JDI documentation e dare un'occhiata allo Java instrument class in particolare per configurare un trasformatore di classe. Ecco una domanda correlata su setting up a JDI launcher (avvio di una nuova JVM).
In realtà stavo imparando la stessa cosa @work oggi. Ho trovato questo articolo piuttosto utile a comprendere il flusso di lavoro dietro alcuni dei più complicati casi hotpush:
http://java.dzone.com/articles/5-jrebel-features-you-couldn%E2%80%99t
- 1. JVM HOT Swapping
- 2. Web-app con clojure utilizzando hot-swapping del codice
- 3. Clojure hot code swapping per uberjars/.classes
- 4. Che cos'è il codice Boilerplate, Hot code e Hot spot?
- 5. Dalvik (Androids JVM) supporta la sostituzione del codice hot?
- 6. Calcolo del tempo di funzionamento in nanosecondi nel codice C
- 7. Sostituzione codice hot non riuscita (eclissi)
- 8. Mac OS X Visualizza swapping
- 9. Integer Byte Swapping in C++
- 10. Swapping contenuti div con jQuery
- 11. Disattivazione del servizio hot deploy di JBoss?
- 12. strano funzionamento del ceil() funzione (PHP)
- 13. Funzionamento dell'interoperabilità
- 14. Impossibile avviare la sostituzione del modulo hot di webpack
- 15. Funzionamento del ripristino automatico dei frammenti
- 16. Ottimizzazione del tempo di funzionamento dell'algoritmo
- 17. Funzionamento di python, Errore interno del server
- 18. Funzionamento interno del garbage collector .NET?
- 19. Comandi Linux - interruzione del funzionamento con timeout
- 20. Memory swapping e memoria virtuale su iOS
- 21. Quanto hot deployment funziona internamente?
- 22. Hot Concat in Rx
- 23. Redux Saga hot reloading
- 24. Distribuzione hot dropwizard
- 25. Elasticsearch strategie hot-backup
- 26. Funzionamento delle transazioni JPA
- 27. sostituzione del modulo hot di webpack: css senza aggiornamento
- 28. Funzionamento modulo Floating Point
- 29. Cosa causerebbe l'interruzione del funzionamento dell'autenticazione automatica di Chrome?
- 30. Funzionamento sbt-assembly
mi piacerebbe prendere in considerazione la lettura di [questo] (http://stackoverflow.com/questions/7989135/is -E-possibile-di-programmazione-compilazione-java-sorgente-codice in memoria di sola). In ogni caso, la risposta accettata probabilmente si adatta alle tue esigenze. – ChiefTwoPencils
Dai un'occhiata a JDWP e in particolare a [JDI] (http://docs.oracle.com/javase/7/docs/technotes/guides/jpda/architecture.html#jdi). –