我怎么知道什么Scala版本的.class文件被编译?
解决方法
如果您使用带有详细选项的javap,则可以在类文件中查看Scala Major / Minor版本.例如,对于使用scala 2.8.0 final编译的文件,将显示以下内容:
javap -private -verbose T Compiled from "SomeTest.scala" public interface T SourceFile: "SomeTest.scala" ScalaSig: length = 0x3 05 00 00 RuntimeVisibleAnnotations: length = 0xB 00 01 00 06 00 01 00 07 73 00 08 minor version: 0 major version: 49 Constant pool: const #1 = Asciz SourceFile; const #2 = Asciz SomeTest.scala; const #3 = Asciz s; const #4 = Asciz ()Ljava/lang/String;; const #5 = Asciz ScalaSig; //etc etc...
javap -verbose T2 Compiled from "SomeTest2.scala" public interface T2 SourceFile: "SomeTest2.scala" ScalaSig: length = 0x87 04 01 1B 06 08 01 02 FFFFFF84 FFFFFF90 FFFFFF80 FFFFFF91 00 05 02 02 54 32 0A 01 03 01 07 3C 65 6D 70 74 79 3E 03 00 13 02 00 06 10 02 07 0C 0D 01 08 0A 02 09 0A 01 04 6C 61 6E 67 0A 01 0B 01 04 6A 61 76 61 09 02 0D 08 02 06 4F 62 6A 65 63 74 08 05 0F 00 FFFFFF86 00 10 01 01 73 15 01 11 10 02 12 18 0E 02 13 16 0D 01 14 0A 01 15 01 05 73 63 61 6C 61 09 02 17 14 01 06 50 72 65 64 65 66 09 02 19 1A 02 06 53 74 72 69 6E 67 0A 02 17 14 minor version: 0 major version: 49 Constant pool: const #1 = Asciz SourceFile; const #2 = Asciz SomeTest2.scala; //etc etc...
ScalaSig常量条目的前两个字节应该代表Scala Major / Minor版本,我相信它们在PickleFormat中定义.2.7.7版本的PickleFormat可以在here中找到,并显示主要/次要版本与2.8.0版本.
我也检查了2.7.1版本的this class,但是这里的Major / Minor版本与2.7.7版本相同,因此您可能无法通过使用此方法区分次要scala版本.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。