gpt4 book ai didi

java - 为什么 Groovy 编译器显然会生成 1.5 版本的 Java?

转载 作者:搜寻专家 更新时间:2023-11-01 02:44:59 27 4
gpt4 key购买 nike

在 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。

可能发生了什么?

  • 查尔斯

最佳答案

默认的 Groovy 行为是不使用与正在使用的 JDK 相同的字节码版本来编译代码。恕我直言,出于兼容性原因,1.5 是默认值。如果您希望编译器输出更新的字节码,您需要明确设置。

例如,如果您使用 Maven 编译代码,您可以使用 GMavenPlus插入。请参阅 targetBytecode 参数的说明。

如果您不使用 Maven,您可以使用 -Dgroovy.target.bytecode=1.7 或研究您的特定构建工具的可能性

关于java - 为什么 Groovy 编译器显然会生成 1.5 版本的 Java?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24757103/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com