gpt4 book ai didi

java - java 9中引入的方法是使用编译器目标java 8编译的

转载 作者:行者123 更新时间:2023-12-01 17:41:09 26 4
gpt4 key购买 nike

我在 Maven 以及 Eclipse 本身中遇到了奇怪的行为。即使我将项目配置为在 Java 1.8 中编译,我也可以编译并运行 (eclipse) Java 9 中引入的一段代码

<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>

有问题的代码行:

LocalTime.ofInstant(cal.toInstant(), cal.getTimeZone().toZoneId());

我在本地使用Oracle的JDK 11进行编译并在eclipse中运行,没有任何错误。当我使用 openjdk:8-jdk-alpine 将其打包到 docker 容器中时,它将启动,但在调用该方法时抛出以下异常:

java.lang.NoSuchMethodError: java.time.LocalTime.ofInstant(Ljava/time/Instant;Ljava/time/ZoneId;)Ljava/time/LocalTime

在进行测试之前,我如何避免和识别这些情况?我是否做错了什么,或者是构建系统或 JDK11 中的错误?

提前致谢

最佳答案

source 选项指定源代码必须与 Java 8 兼容,target 选项指定类应与 Java 8 兼容。但是,如果您使用 Java 11 构建并且那么你可能会得到像你所遇到的错误。

有两个很好的解决方案。一种是使用 Maven 工具链插件并使用 Java 8 进行构建。然后您可以安装多个 Java 版本,Maven 将在每个项目的基础上使用配置的版本。

另一种是使用新的release和testRelease选项。他们将使用给定版本中的 API 类进行构建。只需添加 <release>1.8</release> .

关于java - java 9中引入的方法是使用编译器目标java 8编译的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61075082/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com