如何解决在 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 上配置编译器合规性的方式:
请注意,我无法升级到较新的 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 举报,一经查实,本站将立刻删除。