Я ищу хорошо поддерживаемую библиотеку манипуляции байт-кодом Java с интуитивно понятным API. Кажется, их довольно много. Любые предложения, по которым можно попробовать?Java Bytecode Manipulation Library Предложения
ответ
Лучший ответ на ваш вопрос будет определяться вашими конкретными потребностями и целями; если вы можете расширить то, что вы пытаетесь выполнить, я могу предложить более индивидуальный ответ.
Вместо этого, однако, по моему опыту, ASM предлагает, вероятно, лучшее сочетание зрелости, гибкости и простоты в использовании:
- Это при относительно активном развитии: несмотря на то, последний выпуск с июня 2009 года, разработчики регулярно совершают сделки с их VCS.
- Это уже широко используется в ряде известных продуктов Java, таких как AspectJ, Groovy, Cobertura и многие другие, что обещает широкую базу пользователей и, следовательно, широкое сообщество для поддержки.
- Это довольно тщательно документировано, и есть ряд руководств, руководств пользователя и справочных документов, доступных как от OW2 Consortium, так и от сообщества в целом.
N.B. Комментарий @Yuri, оставшийся ниже, описывает ситуацию, которую я лично еще не встречал, но которая может потенциально представлять собой значительное препятствие. Соблюдайте его наблюдение/опыт при оценке различных библиотек манипуляции байт-кода.
Это действительно зависит от того, как вы определяете интуитивно понятный ;-) Я начал использовать ASM две недели назад для выполнения определенной задачи в моем текущем проекте, и это сработало как шарм. Мне потребовалось всего пару часов, чтобы понять это и использовать его, но я бы не стал называть API интуитивно понятным. Но если вы немного знаете о байт-коде Java и знакомы с шаблоном посетителя, кривая обучения не очень высока, IMO.
Еще одно преимущество ASM заключается в том, что оно, по-видимому, связано со стандартным API, по крайней мере, в Sun JDK, хотя в другом пакете (com.sun.xml.internal.ws.org.objectweb.asm и подпакетах).
Вы правы: судя по некоторым странным API-интерфейсам, определения людей интуитивно понятны, по-видимому, широко различаются;). Я просто потратил немного времени на ASM, и я гораздо менее запуган, чем я ожидал! Думаю, я буду придерживаться этого. Спасибо за Ваш ответ. – Daniel
Пожалуйста, не используйте пакеты реализации ... –
Да, правильно, не используйте пакеты реализации. И не манипулируйте байт-кодом, если вам действительно не нужно ;-) –
Посмотрите на эту статью: http://www.pabrantes.net/blog/space/start/2008-03-24/1
Немного старая, но по-прежнему актуальна.
ASM и Javassist являются наиболее часто используемыми. Bcel умирает.
- 1. Java Bytecode Manipulation и API отражения Java?
- 2. Java Library for Sound Manipulation
- 3. Java Bytecode Manipulation - Как внедрить в середине метода?
- 4. javascript list manipulation library/framework
- 5. ASP.NET Excel Manipulation FREE Library
- 6. Image Manipulation library/framework в AS3
- 7. Image Manipulation library не создает миниатюру
- 8. String Manipulation java
- 9. Запуск Java bytecode
- 10. refractoring java bytecode
- 11. throws vs Java Bytecode
- 12. Компиляция Java Bytecode
- 13. Java Bytecode Signatures
- 14. Java Bytecode DUP
- 15. Оптимизация компилятора: Java bytecode
- 16. Java Bytecode Injection
- 17. java bytecode editor?
- 18. Программирование на Java bytecode
- 19. Trace java bytecode stream
- 20. Библиотеки манипуляции Java Bytecode
- 21. Rapid Java Shape Manipulation
- 22. Java File manipulation
- 23. Java String Manipulation ReplaceAll
- 24. Java LinkedList Node Manipulation
- 25. Java - String Manipulation
- 26. Java Image Manipulation
- 27. Java String Split/Manipulation
- 28. Java split (String Manipulation)
- 29. Java: String Manipulation
- 30. java bytecode - no ipush инструкция
Извините за отсутствие специфики в вопросе. Я бы предпочел не выделять особенности того, что я делаю, но ваш ответ был весьма полезным. Благодарю. Я думаю, что в конечном итоге я использую ASM. – Daniel
Глядя на этот ответ, я попробовал ASM, и у него (4.0) есть либо ошибка, либо действительно странное поведение. Я использую Tree API и итерацию над инструкциями метода InsnList. Теперь первая итерация дает один результат, а другая идентичная итерация, следующая за первой, дает другой результат - одна команда дублируется и помещается поверх списка. Никакой код модификации вообще, только две итерации один за другим. Переключение на Javassist. –
@YuriUshakov: Это не та ситуация, которую я лично пережил. Спасибо за хедз-ап! – RTBarnard