在遇到不同JSE版本之间的问题后,我正在尝试记录用于编译的Java编译器版本(实际上是Groovy 2.1.9、Grails 2.3.8、Java 1.7.0_60)。
经过一番搜寻,我构建了以下代码片段来读取类的前导字节 - 参见/http://en.wikipedia.org/wiki/Java_class_file#General_layout
(将路径更改为与包名称匹配的类):
class CompilerVersionSupport {
public static String getVersion() {
String classAsPath = 'com/my/organisation/CompilerVersionSupport.class';
InputStream stream = (new CompilerVersionSupport()).getClass().getClassLoader().getResourceAsStream(classAsPath);
DataInputStream ins = new DataInputStream (stream)
assert( ins.readUnsignedShort() == 0xcafe )
assert( ins.readUnsignedShort() == 0xbabe )
int minor = ins.readUnsignedShort();
int major = ins.readUnsignedShort();
ins.close();
int javaVersion = major - 44
return "1.$javaVersion"
}
}
问题在于它返回了1.5。
可能出了什么问题?
- 查尔斯