重复:
如果我有一个已编译的Java类,是否有一种方法可以从只有类文件时判断其目标版本兼容性?特别是,我有一些编译为Java 6的类文件,在Java 5下运行并出现“无法识别的版本”错误。我想能够查看类文件并找到其目标版本兼容性,而不必运行JVM。有什么想法吗?
如果我有一个已编译的Java类,是否有一种方法可以从只有类文件时判断其目标版本兼容性?特别是,我有一些编译为Java 6的类文件,在Java 5下运行并出现“无法识别的版本”错误。我想能够查看类文件并找到其目标版本兼容性,而不必运行JVM。有什么想法吗?
你可以使用随附在标准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
file Foo.class
Foo.class:已编译的Java类数据,版本为45.3顺便说一句:如何进行编译以产生此输出(45.3),是0.45 jdk1.x还是j2me? - RzRjavap -version
报告的是 javap
的版本,而不是你的 target.class
的版本。 - Cardin我在网上找到了这个方法,它可以正常工作。
每个 '.class' 文件的开头都是以下内容:
- 魔数 [4 字节]
- 版本信息 [4 字节]
使用以下每个选项编译的 '.class' 文件的十六进制转储结果如下:
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 语言 ;)!
希望这能有所帮助。
Anthony Borla
来自:http://bytes.com/groups/java/16603-how-determine-java-bytecode-version
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)
它非常适合标准的Unix脚本工具链。
来源: http://twit88.com/blog/2008/09/22/java-check-class-version/
Java是一种流行的编程语言,常用于开发企业级应用程序。在运行Java应用程序时,计算机需要有安装Java虚拟机(JVM)才能正确解释并执行Java代码。与JVM相关的一个重要概念是类版本,即Java类文件的版本。
在开发和维护Java应用程序时,了解Java类文件的版本非常重要。可以通过以下步骤检查Java类文件的版本:
1. 打开命令提示符或终端窗口。
2. 转到包含Java类文件的目录。
3. 运行以下命令:javap -verbose MyClass。
其中,“MyClass”是要检查版本的Java类文件的名称。
4. 检查输出以确定Java类文件的版本。
理解Java类文件的版本可以帮助开发人员确保他们的应用程序在不同版本的JVM上运行时具有良好的兼容性。
try {
String filename = "C:\\MyClass.class";
DataInputStream in = new DataInputStream(new FileInputStream(filename));
int magic = in.readInt();
if (magic != 0xcafebabe) {
log.info(filename + " is not a valid class!");
}
int minor = in.readUnsignedShort();
int major = in.readUnsignedShort();
log.info(filename + ": " + major + " . " + minor);
in.close();
} catch (IOException e) {
log.info("Exception: " + e.getMessage(), e);
}
你可以查看文件中的字节偏移量6和7(可能是十六进制转储),这将告诉你使用了哪个版本。我认为Bytecode Visualizer(Eclipse插件)可以查看类文件是为哪个版本创建的。