微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Java 7 上使用 OkHttpClient v3.12.x 时无法解析 java.time.Duration 类型

如何解决在 Java 7 上使用 OkHttpClient v3.12.x 时无法解析 java.time.Duration 类型

我正在开发一个为 Java 7 编译的项目。

在这个项目中,我使用 OkHttpClient v3.12.13,它与 Java 7 兼容(如 here 所述)。但是,这些行会在 Eclipse 编辑器中产生错误

private static final OkHttpClient GLOBAL_OK_HTTP_CLIENT = new OkHttpClient.Builder()
    .readTimeout(10,TimeUnit.SECONDS)
    .build();

错误是这样的:

The type java.time.Duration cannot be resolved. It is indirectly referenced from required .class files

错误仅由编辑器显示。事实上,当我使用 CLI(在 Eclipse 之外)编译我的项目时,我没有收到任何对 java.time 包的隐式引用的错误

我知道在 Java 7 中没有 java.time 包。事实上,我没有在我的代码中使用它,它只是被 OkHttp 库隐式引用(如错误消息所述)。

有没有办法在 Eclipse 上修复这个错误

这是我在 Eclipse 上配置编译器合规性的方式:

Eclipse compiler compliance

请注意,我无法升级到较新的 Java 版本。

解决方法

java.time 类内置于 Java 8 及更高版本中。您正在将您的应用部署到 Java 7。该版本的 Java 缺少由您的代码调用库所调用的 java.time.Duration 类。

您声称库支持 Java 7。如果这是真的,库必须有一个开关以避免使用 Java 7 中不可用的类。

您未正确配置您的 IDE,以允许在比您部署的版本更高的版本中进行编程。这是你应该解决的问题。如果在 Java 7 上部署,则针对 Java 7 进行编译。请参阅问题 how do I get eclipse to use a different compiler version for Java?

当然,最好的解决方案是迁移到 Java 的现代版本。 Java 7 reached end-of-life in 2015-04。我强烈建议改用长期支持 (LTS) 版本。目前是 Java 8 和 Java 11。

如果是您自己使用 java.time 类的代码,我建议将 ThreeTen-Backport 库添加到您的项目中。该库提供了大部分 java.time 功能和几乎相同的 API,可用于 Java 6 和 Java 7。但我猜这不会满足您所讨论的库,尽管您可能想要验证。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。