首页 > 解决方案 > 在 Java 7 上使用 OkHttpClient v3.12.x 时无法解析类型 java.time.Duration

问题描述

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

在这个项目中,我使用了与 Java 7 兼容的 OkHttpClient v3.12.13(如此处所述)。然而,这些行在 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

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

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

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

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

Eclipse 编译器合规性

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

标签: javaeclipsejava-7okhttpjava-time

解决方案


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

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

您未正确配置 IDE 以允许在比您部署的版本更高的版本中进行编程。这是你应该解决的问题。如果在 Java 7 上部署,则为 Java 7 编译。请参阅问题,如何让 eclipse 为 Java 使用不同的编译器版本?.

当然,最好的解决方案是迁移到现代版本的 Java。Java 7 已于 2015-04 年结束生命周期。我强烈建议迁移到长期支持 (LTS) 版本。目前这将是 Java 8 和 Java 11。

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


推荐阅读