Java 项目中 java.time 包报错的完整解决方案

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 包。

三步统一配置,彻底解决

  1. 设置模块语言级别(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。
  2. 配置 IDE 编译器目标字节码版本(Settings)
    File → Settings → Build, Execution, Deployment → Compiler → Java Compiler → Target bytecode version → 设为 11
    此项控制 IntelliJ 自身编译器生成的 .class 文件版本,若为 1.8,即使源码用 Duration.ofSeconds(10),编译器也会拒绝识别其所属包。

  3. 同步配置 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
        
    

? 验证与补充建议

  • 修改后务必执行 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