当前位置: 首页 > 知识库问答 >
问题:

是否可以将 Java11 代码编译为 Java8 字节码并在 8 上运行?

毋胜涝
2023-03-14

我正在使用java 11处理一些依赖项并编译到旧版本。我将一个依赖项迁移到Java11并正常工作,但我们仍然必须在Java8上运行Tomcat 7或8。是否可以使用--的释放标志来编译使用var流(). drop而(…)Map.of(…)并在8上运行的代码

发布标志表明应该可以:

--发布版本 针对特定 VM 版本的公共、受支持和记录的 API 进行编译。支持的版本目标为 6、7、8 和 9。

这个项目是一个依赖项,独立运行在SprinBoot2.1和Java11上很好,但需要在Java8上运行。

我的maven插件编译器设置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.0</version>
    <configuration>
        <release>8</release>
    </configuration>
</plugin>

但是这禁止编译

尝试编译:

return List.of("dsadas", "dasdadddds", "£dsada", "dasdas")
        .stream()
        .dropWhile(s -> s.contains("das"))
        .collect(Collectors.toList());

throws错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project api: Compilation failure: Compilation failure: 
[ERROR] /home/agilob/Projects/.....java:[58,13] cannot find symbol
[ERROR]   symbol:   class var
[ERROR]   location: 
[ERROR] /home/agilob/Projects/....java:[43,20] cannot find symbol
[ERROR]   symbol:   method of(java.lang.String,java.lang.String,java.lang.String,java.lang.String)
[ERROR]   location: interface java.util.List
[ERROR] -> [Help 1]

共有3个答案

丰俊艾
2023-03-14

供创意使用

这对我有用

能远
2023-03-14

现在有了 https://github.com/bsideup/jabel

Jabel - javac 12插件,使其发出Java 8字节

姚煜
2023-03-14

这是不可能的。只允许目标Java平台的API方法和类。

这在JEP 247中定义:为旧平台版本编译

定义了一个新的命令行选项--release,它自动配置编译器以生成将链接到给定平台版本的实现的类文件。

说可以用的相关部分是:

对于N

对于N

 类似资料:
  • Java8引入了重要的新语言特性,如lambda表达式。 语言中的这些变化是否伴随着编译字节码中的重大变化,从而阻止它在不使用某些反向翻译器的情况下在Java7虚拟机上运行?

  • 问题内容: Java 8引入了重要的新语言功能,例如lambda表达式。 语言的这些变化是否伴随着已编译字节码的重大变化,从而阻止了它在Java 7虚拟机上运行而无需使用某些逆向转换程序? 问题答案: 不可以,在源代码中使用1.8功能要求你以1.8 VM为目标。我刚刚尝试了新的Java 8版本,并尝试使用进行编译,但编译器拒绝了:

  • 我的构建服务器安装了Open JDK 8,我的正式服安装了oracle JRE 8。是否有可能在开放的JDK中编译代码并在Oracle JRE 8中部署工件?

  • 问题内容: 我尝试在Android上的Janino上使用这些东西,并得出结论说,它们根本无法在Dalvik VM中运行。 所以我只想问一个简单的问题:在 Android上 ,是否有可能在运行时编译包含代码的字符串以供应用程序使用。如果是这样,是否有让我这样做的库和/或您可以共享一个代码示例来做到这一点? 对于 (一个非常简单的) 示例,如果我有一个包含以下内容的String对象: 作为一根巨大的弦

  • 问题内容: 我知道PHP在服务器上运行之前先被编译为字节码,然后可以缓存该字节码,这样就不必每次访问Web时都重新解释整个脚本。 但是,您可以“编译” PHP代码并上载一个二进制文件,该文件将由字节码解释器运行吗? 问题答案: 提出这个问题后,Facebook推出了 适用于PHP的HipHop, 这可能是迄今为止测试最完善的PHP编译器(它运行着世界十大网站之一)。但是,Facebook停止使用H

  • 是否可以将Java字节码自动转换为IJVM?你知道有什么可能性吗?