Mik*_*one 12 java compiler-construction
如果我有一个已编译的Java类,有没有办法从类文件中告诉它的目标版本兼容性是什么?具体来说,我有许多编译为Java 6的类文件,它们在Java 5下运行并给出"无法识别的版本"错误.我希望能够在不运行JVM的情况下查看类文件并找到其目标版本兼容性.有任何想法吗?
bru*_*nde 39
您可以使用标准JDK附带的javap实用程序.
javap -verbose MyClass
Compiled from “MyClass.java”
public class MyClass extends java.lang.Object
SourceFile: “MyClass.java”
minor version: 3
major version: 45
Run Code Online (Sandbox Code Playgroud)
Kal*_*ser 23
我在网上发现了这个并且它有效.
每个'.class'文件都以以下内容开头:
- 幻数[4字节]
- 版本信息[4字节]
使用以下每个选项编译的'.class'文件的hexdump显示:
javac -target 1.1==>CA FE BA BE 00 03 00 2D
javac -target 1.2==>CA FE BA BE 00 00 00 2E
javac -target 1.3==>CA FE BA BE 00 00 00 2F
javac -target 1.4==>CA FE BA BE 00 00 00 30也许您可以使用此信息编写自己的".class"文件版本检查实用程序,使用Java,或者脚本或shell语言;)!
我希望这有帮助.
安东尼博拉
来自:http://bytes.com/groups/java/16603-how-determine-java-bytecode-version
小智 5
Linux/Unix用户在标准工具箱中有一个很好的工具:file实用程序.现代版本可以检测Java类的版本,甚至可以输出已知类文件类型的Java版本.
示例输出:
com/sample/Tracker.class: compiled Java class data, version 45.3
com/sample/TestListener.class: compiled Java class data, version 49.0 (Java 1.5)
Run Code Online (Sandbox Code Playgroud)
它非常适合标准的Unix脚本工具链.
| 归档时间: |
|
| 查看次数: |
35894 次 |
| 最近记录: |