Sto cercando una libreria di manipolazione bytecode Java ben mantenuta con un'API intuitiva. Sembra che ce ne siano un bel po 'là fuori. Qualche suggerimento su quali provare?Suggerimenti libreria manipolazione Bytecode Java
risposta
La migliore risposta alla tua domanda sarà regolata dalle tue esigenze e obiettivi specifici; se riesci ad espandere ciò che stai cercando di ottenere, posso forse offrire una risposta più personalizzata.
In luogo di questo, però, nella mia esperienza, ASM offre probabilmente la migliore combinazione di maturità, flessibilità e facilità d'uso:
- E 'in fase di sviluppo relativamente attivo: anche se l'ultima release è dal giugno 2009, gli sviluppatori fanno regolarmente commit per i loro VCS.
- È già ampiamente utilizzato in numerosi prodotti Java, come AspectJ, Groovy, Cobertura e molti altri, il che promette un'ampia base di utenti e quindi un'ampia community di supporto.
- È abbastanza ben documentato e sono disponibili una serie di esercitazioni, guide utente e documenti di riferimento sia dallo OW2 Consortium sia dalla comunità in generale.
N.B. Il commento @Yuri qui sotto descrive una situazione che personalmente non ho ancora incontrato ma che potrebbe potenzialmente rappresentare un ostacolo significativo. Tieni a mente la sua osservazione/esperienza mentre valuti le varie librerie di manipolazione bytecode.
Questo dipende in realtà da come si definisce intuitivo ;-) Ho iniziato a utilizzare ASM due settimane fa per una determinata attività sul mio progetto corrente e ha funzionato come un incantesimo. Mi ci sono voluti solo un paio d'ore per capirlo ed essere in grado di usarlo, ma non definirei l'API intuitivamente. Ma se conosci un po 'di codice bytecode Java e conosci il modello del visitatore, la curva di apprendimento non è molto alta, IMO.
Un altro vantaggio di ASM è che è apparentemente in bundle con l'API standard almeno in Sun JDK, anche se in un pacchetto diverso (com.sun.xml.internal.ws.org.objectweb.asm e subpackages).
Hai ragione: a giudicare da alcune delle API bizzarre là fuori, le definizioni delle persone di intuitivo sembrano differire ampiamente;). Ho appena passato un po 'di tempo a guardare ASM, e sono molto meno intimidito di quanto mi aspettassi! Penso che resterò fedele. Grazie per la tua risposta. – Daniel
Si prega di non utilizzare pacchetti di implementazione ... –
Sì, giusto, non usare pacchetti di implementazione. E non manipolare neanche il bytecode, a meno che non sia davvero necessario ;-) –
Date un'occhiata a questo articolo: http://www.pabrantes.net/blog/space/start/2008-03-24/1
Un po 'vecchio ma ancora attuale.
ASM e Javassist sono i più usati ora. Bcel sta morendo.
- 1. È possibile eseguire la manipolazione bytecode quando si utilizza OSGi?
- 2. Compilare a bytecode java (senza utilizzare Java)
- 3. editor bytecode java?
- 4. Analisi bytecode in Java
- 5. Cos'è l'iniezione bytecode Java?
- 6. Buona libreria di manipolazione di stringhe C++
- 7. È possibile trasformare il bytecode LLVM in bytecode Java?
- 8. Comportamento diverso di bytecode java
- 9. Alternative alla strumentazione bytecode Java
- 10. Ottimizzazione del compilatore: bytecode Java
- 11. Compilatore bytecode Java in JavaScript
- 12. variabili locali in bytecode Java
- 13. Suggerimenti per la manipolazione di una mappa SVG
- 14. Informazioni su codice bytecode Java e JVM
- 15. libreria di manipolazione dei dati JSON Javascript
- 16. Libreria manipolazione bit per ANSI C
- 17. E 'possibile visualizzare un codice di classe Java bytecode
- 18. finale manipolazione variabile in Java
- 19. in esecuzione bytecode jython utilizzando java
- 20. Ottimizzazioni Java: solo bytecode vs JIT
- 21. bytecode Java: tipi di variabili locali?
- 22. Modifica ASM bytecode Java - Modifica corpi metodo
- 23. equivalenti bytecode Java per ilasm/ildasm
- 24. come è rappresentato l'annotazione java in java bytecode
- 25. Libreria grafica Java
- 26. Esiste un ottimizzatore bytecode Java che rimuove i gotos inutili?
- 27. Libreria grafica Java
- 28. Manipolazione stringa di query in Java
- 29. Suggerimenti per scrivere conciso ed elegante Java
- 30. Suggerimenti per la serializzazione degli oggetti Java
Siamo spiacenti per la mancanza di dettagli nella domanda. Preferirei non dare le specifiche di quello che sto facendo, ma la tua risposta è stata molto utile. Grazie. Penso che finirò per usare ASM. – Daniel
Guardando questa risposta ho provato ASM e questo (4.0) ha un bug o un comportamento davvero strano. Sto usando Tree API e sto iterando sulle istruzioni del metodo InsnList. Ora, la prima iterazione dà un risultato e un'altra iterazione identica dopo la prima dà un altro risultato: un'istruzione viene duplicata e posta in cima alla lista. Nessun codice di modifica, solo due iterazioni una per una. Passare a Javassist. –
@YuriUshakov: Questa non è una situazione che ho vissuto personalmente. Grazie per il testa a testa! – RTBarnard