加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 16:22:17 所属栏目:大数据 来源:网络整理
导读:在JSE版本之间存在差异的一些问题之后,我正在尝试记录用于编译的 Java编译器版本(实际上是Groovy 2.1.9,Grails 2.3.8,Java 1.7.0_60). 经过一番翻找后,我构建了这段代码来读取该类的前导字节 – 请参阅/ http://en.wikipedia.org/wiki/Java_class_file#Gener
在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或研究特定构建工具的可能性

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读