我正在使用java 11处理一些依赖关系,并将其编译到旧版本。我将一个依赖项迁移到了Java 11,运行良好,但我们仍然必须在Java8上运行Tomcat 7或8。是否可以使用--release标志编译使用var、stream().dropwhile(...)或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>但是这禁止编译>jdk8 8特定的代码。我正在使用最新的maven 3.6.0和mvn编译器,如上面所示。
试图编译:
return List.of("dsadas", "dasdadddds", "£dsada", "dasdas")
.stream()
.dropWhile(s -> s.contains("das"))
.collect(Collectors.toList());抛出错误:
[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]发布于 2018-11-15 18:47:27
这是不可能的。只允许目标Java平台的API方法和类。
在JEP 247:为较早的平台版本编译中定义的
定义了一个新的命令行选项- platform,它自动配置编译器以生成类文件,这些类文件将链接到给定平台版本的实现。
可以使用的相关部分是:
对于N < 9,文档化的API由javac默认的JDK引导路径上的公共API组成。 对于N >= 9,文档化的API包括(i)从JDK映像中的那些模块导出的API,这些模块是JDK文档的一部分;(ii)从jdk.unsupported模块导出的API(见JEP 260)。
发布于 2019-09-01 18:59:41
现在使用https://github.com/bsideup/jabel是可能的
Jabel - javac 12插件,使其发出Java 8字节码。
发布于 2020-02-21 17:02:22
用于思想用途

对我来说很管用
https://stackoverflow.com/questions/53325376
复制相似问题