根据the ASM FAQ,要获取示例ASM代码,我应该使用ASMifier类,如下所示:

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

这与Fedora 20提供的ASM 3.3.1一起提供。FAQ是否适用于较新版本,我应该使用其他说明吗? Fedora是否弄乱了包装(即使他们的bug跟踪器什么也没显示)?还有吗

最佳答案

浏览ASM的SVN存储库时,您可以阅读revision history of the ASMifier :它是formerly known as the ASMifierClassVisitor ,也是3.1.1版中该实用程序的名称。

ASM从来没有维护二进制甚至编译兼容性的声誉。因此,您可能会遇到一些问题,例如使用库的非出血边缘版本时所描述的问题。 (作者 promise 在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

09-15 16:50