
intellij idea 中使用 jdk 11 时出现“package java.time does not exist”错误,通常是因项目语言级别、编译器目标字节码版本或 maven 编译插件配置未统一设为 jdk 11 所致。本文提供三步精准修复方案,确保 duration 等新时间 api 正常工作。
该错误看似指向 java.time.Duration 类缺失,实则是编译环境未正确识别 JDK 11 的语言特性与标准库。java.time 包自 Java 8 引入,但若项目编译配置仍锁定在 Java 7 或更低版本(如 Language Level = 8 但 Target bytecode = 1.8),或 Maven 编译插件未显式声明源码与目标兼容性,IDEA 就会忽略 JDK 11 的完整类路径,导致编译期无法解析 java.time 包。
✅ 三步统一配置,彻底解决:
-
设置模块语言级别(Project Structure)
File → Project Structure → Modules → [Your Module] → Sources → Language level → 选择 11 - Local variable syntax for lambda parameters(或直接选 11)。⚠️ 注意:仅设置 Project SDK 为 JDK 11 不够,必须显式指定 Language Level。
配置 IDE 编译器目标字节码版本(Settings)
File → Settings → Build, Execution, Deployment → Compiler → Java Compiler → Target bytecode version → 设为 11。
此项控制 IntelliJ 自身编译器生成的 .class 文件版本,若为 1.8,即使源码用 Duration.ofSeconds(10),编译器也会拒绝识别其所属包。同步配置 Maven 编译插件(pom.xml)
在 pom.xml 的中添加或更新 maven-compiler-plugin,强制 Maven 构建时使用 JDK 11:
org.apache.maven.plugins maven-compiler-plugin 3.8.1 11 11 --enable-preview
? 验证与补充建议:
立即学习“Java免费学习笔记(深入)”;
- 修改后务必执行 Maven → Reload project(右键项目 → Reload project),使配置生效;
- 检查 Project Settings → Project → Project SDK 和 Project language level 是否均为 JDK 11;
- 若使用 TestNG 运行 testng.xml,还需确认运行配置中 JRE 选项是否指向同一 JDK 11 安装路径(Run → Edit Configurations → JRE);
- 避免混用 source=11 与 target=1.8 等不匹配组合——这会导致编译器行为不一致,是此类错误最常见根源。
完成上述三项配置后,import java.time.Duration; 将被正常识别,driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); 可顺利编译执行。核心原则是:JDK 版本、语言级别、字节码目标、Maven 编译参数必须严格对齐为 11。











