我有紧急情况。我有一个使用java 7编译的应用程序,同样在Java 8 jvm上运行。现在我需要修改某些文件。但是,我只有java 8 sdk。我可以部署java 8编译的类文件吗? java 7字节代码能否调用java 8文件?
答案 0 :(得分:1)
JVM 8将运行以前所有编译器的类文件。类文件调用另一个编译器上编译的另一个文件没有问题。当您使用第三方库并且不关心使用哪个编译器来构建jar文件时,这是显而易见的。
答案 1 :(得分:1)
当然,为Java 7编译的字节码可以使用为Java 8编译的类,假设它们都运行在Java 8或更新的JRE上。这正是您为Java 7编译的应用程序在Java 8环境中运行时所发生的情况,因为您的类正在使用JRE类。
但是为Java 8编译的这些类不能在Java 7 JRE上运行。如果是这样,您仍然可以使用-target 1.7
选项让Java 8 JDK的javac
命令为Java 7环境生成类文件。然而,有捕获。 javac
要求您也使用-source 1.7
选项来启用Java 7目标,因此在这种情况下您不能使用新的语言功能,此外,您必须遵守规则,不要使用更新的API功能这些在Java 7中不存在。
有-bootclasspath
选项允许重定向到另一组JRE类以避免此类错误,但由于您不想下载此类环境,因此无效。这将通过Java 9 JDK解决。使用该JDK,您只需指定--release 7
选项,其中包含-source 1.7
,-target 1.7
和-bootclasspath
,而JDK本身则提供适当的API描述。