【发布时间】:2021-04-22 17:02:16
【问题描述】:
我已经编写了 spring boot 应用程序,基本上是 REST 服务,使用:带有 Spring boot 的 Maven 项目、spring data Jpa、Spring web、Java 版本 11。java.version 是用 pom.xml 编写的。我还在使用 HttpClient Java 9 或 11(?) 类来调用其他提供商的一些 Web 服务。
我的计算机上安装了 Java SE DK 11。一切运行良好,但是当我尝试在安装了 Java 8 的 Windows Server 上运行构建的 Maven 包时出现问题。
我什至使用 HttpClient 使用一些小型沙盒应用程序对其进行了测试,mvn 打包,使用 java -jar packagename.jar 运行它失败了,因为它不支持所需的类。
我的问题是,是否可以将我使用一些 Java 9 Lambda 等编写的应用程序编译并构建为可以在安装了 Java 8 的计算机上运行的 jar 文件?或者唯一的选择是重新编码部分代码以满足旧的支持语法和类?
问候
【问题讨论】:
-
如果您使用过 JDK11 的特定部分(HttpClient?),很明显它不能再在 JDK8 上运行了。问题是为什么您使用 Java9+ 的 httpClient 而不是 Spring Boot 的东西提供?而且为什么要使用JDK11,你需要把它放在只有JDK8的系统上?不,你不能将 JDK9+ 代码编译成 JDK8……如果你想与 JDK8 兼容,你必须只使用 JDK8 代码(语法等)……没有其他选择……
-
因为这是我的第一个后端项目,我犯了一个错误,没有检查运行 Java 的服务器上的版本。所以这些可以放在 pom.xml 中的选项:(maven-compiler-plugin with source & target)并不能帮助某人重新编译代码,比如说目标版本到 1.8(Java 8)?对于这个问题,没有像使用 Babel 将代码转换为旧 ES 版本的前端 JS 开发这样的解决方案?
-
如果您的目标环境仅提供 JRE8 来运行您的代码,则需要针对 JRE8 进行编译。 JDK11 将编译您的代码以在称为向后兼容性的 JRE11 上运行。在 JS 编译器中,将不同的语法/代码转换为较旧的 ECMA 版本,这在 Java 中并非如此。 Java具有向后兼容性。从技术上讲,您可以使用 JDK11 将代码编译为 JDK8,但如果您使用 JDK11,这将不起作用(--release 8)。如果您将源/目标更改为 8 并重新编译,它将起作用。
标签: java spring spring-boot maven