如何用Scala(50.0 / 51.0)发布更新的类文件版本?
我想用scalac
创建的类来测试新的类型检查字节码验证器。
scalac
目前输出版本49.0的类文件,但是新的类型检查验证器仅在版本51.0以后才是必需的。
我试图用ProGuard(实际上已将其转换为版本50.0)对类进行“预校验”,但我不确定新的验证器是否会自动回退到旧的类型推理验证器。
如何将类文件转换为版本51.0(或者,如何在加载版本50.0的类文件时找出使用哪个验证器)?
看起来像FJBG(NSC用来生成字节码的库)在支持StackMap方面已经看到了一些努力,但我不知道它有多远。
如果你问斯卡拉内部,Stephane Michelou可能会弹出。 他是一直在努力的人。
我不确定,但我认为字节码格式并没有经过深刻的改变,它可能总是向后兼容。 (如果你知道关于字节码的一些东西,请记住long和double在常量池和操作数堆栈中的双打,这些设计有点疯狂。它没有被修改,是吗?)因此,更改主要/次要编号可能会起作用。
怎么做? 有两种方法:
[1] http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html
我会使用ASM来解析字节码。 我知道scala(和clojure)在内部使用ASM,所以花在学习上的努力不会被浪费。 您可以将一个ClassReader和一个EmptyVisitor放在一起,以覆盖可快速提供标题信息的访问方法。
链接地址: http://www.djcxy.com/p/41781.html上一篇: How to emit newer class file versions with Scala (50.0/51.0)?