2014-11-16 2 views
3

Согласно the ASM FAQ, чтобы получить пример кода ASM, я должен использовать ASMifier класс, как это:ASMifier класс отсутствует ASM 3.3.1

java -classpath "asm.jar;asm-util.jar" org.objectweb.asm.util.ASMifier org/domain/package/YourClass.class 

Но что заставляет меня ошибку:

Error: Could not find or load main class org.objectweb.asm.util.ASMifier 

Глядя на JAR-файлов, то ASMifier класс, кажется, отсутствует, хотя его вспомогательные классы присутствуют:

./org/objectweb/asm/util/ASMifierClassVisitor.class 
./org/objectweb/asm/util/ASMifierAnnotationVisitor.class 
./org/objectweb/asm/util/ASMifierMethodVisitor.class 
./org/objectweb/asm/util/ASMifierAbstractVisitor.class 
./org/objectweb/asm/util/ASMifierFieldVisitor.class 

Это с ASM 3.3.1, как это предусмотрено Fedora 20. Является ли FAQ для более новой версии, и я должен использовать разные инструкции? Неужели Fedora испортила упаковку (хотя их ошибка-трекер ничего не показывает)? Что-то другое?

ответ

3

При просмотре SVN-репозитория ASM вы можете прочитать revision history of the ASMifier: Это было formerly known as the ASMifierClassVisitor, которое также было именем этой утилиты в версии 3.1.1.

ASM никогда не имела репутации поддержания совместимости с бинарными или даже компиляционными системами. Таким образом, вы можете столкнуться с несколькими проблемами, такими как тот, который вы описываете, при использовании не-кровоточащих версий библиотеки. (Авторы обещали улучшить это после версии 4 ASM.) Однако вы или библиотеки, которые вы используете, должны всегда переупаковывать ASM в другое пространство имен, чтобы избежать таких проблем. Это даже recommended in the FAQ to using ASM.

Для запуска вашего примера, вы должны использовать:

java -classpath "asm.jar;asm-util.jar" \ 
    org.objectweb.asm.util.ASMifierClassVisitor \ 
    org/domain/package/YourClass.class 
Смежные вопросы