Tho*_*sen 4 java bytecode introspection
我的情况是部署平台是Java 5,并且在Java 6下使用Eclipse进行开发,我们已经建立了在开始处理给定项目时创建新工作区的过程.因此,所需步骤之一是将编译器级别设置为Java 5,这经常被遗忘.
我们有一台运行部署平台的测试机器,我们可以运行我们构建的代码并在我们的PC上进行初始测试,但如果我们忘记切换编译器级别,程序就无法运行.我们有一个构建服务器,用于创建发送给客户的内容,但运行良好,但这适用于不需要构建服务器并且会添加不必要的等待的开发.
现在的问题是: CAN我编程方式确定当前类的字节代码版本,所以我的代码已经可以打印出一个警告,而我的本地PC上进行测试?
编辑:请注意要求是当前的课程.这可以通过classloadeer获得吗?或者我必须找到当前类的类文件,然后进行调查吗?
小智 12
很容易找到这个在课堂上运行javap的方法
有关详细信息,请访问http://download.oracle.com/javase/1,5.0/docs/tooldocs/windows/javap.html
例:
M:\Projects\Project-1\ant\javap -classpath M:\Projects\Project-1\build\WEB-INF\classes -verbose com.company.action.BaseAction
Run Code Online (Sandbox Code Playgroud)
并寻找以下几行
minor version: 0
major version: 50
Run Code Online (Sandbox Code Playgroud)
//TODO: error handling, stream closing, etc.
InputStream in = getClass().getClassLoader().getResourceAsStream(
getClass().getName().replace('.', '/') + ".class");
DataInputStream data = new DataInputStream(in);
int magic = data.readInt();
if (magic != 0xCAFEBABE) {
throw new IOException("Invalid Java class");
}
int minor = 0xFFFF & data.readShort();
int major = 0xFFFF & data.readShort();
System.out.println(major + "." + minor);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12154 次 |
| 最近记录: |