Cha*_*esW 4 java groovy version
在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"
}
}
Run Code Online (Sandbox Code Playgroud)
麻烦的是,它返回1.5。
可能会发生什么?
Groovy的默认行为是不使用与所用JDK相同的字节码版本编译代码。由于兼容性原因,默认值为1.5,恕我直言。如果希望编译器输出较新的字节码,则需要显式设置。
例如,如果您使用Maven编译代码,则可以使用GMavenPlus插件。请参阅targetBytecode参数说明。
如果您不使用Maven,则可以使用-Dgroovy.target.bytecode=1.7或研究特定构建工具的可能性
| 归档时间: |
|
| 查看次数: |
898 次 |
| 最近记录: |