Java 11 中 java.time 包不可用的完整解决方案

intellij idea 中出现 “package java.time does not exist” 错误,根本原因是项目编译级别、jdk 配置或 maven 编译插件未统一设为 java 11,导致 java.time.duration 等 java 8+ 新增 api 无法识别。

该错误常见于 Selenium + TestNG 的 Maven 项目中,尤其当代码中使用了 Duration.ofSeconds(10) 并显式导入 import java.time.Duration 时——这要求运行环境和编译环境均支持 Java 8 及以上版本(java.time 自 Java 8 引入,但 JDK 11 是更稳妥的基准)。尽管你已安装 JDK 11 并在模块中设置了 Language Level 为 11,仍报错,说明多层级编译配置未完全对齐

✅ 正确解决需同步校准以下三个关键位置:

1. 模块语言级别(Project Structure)

  • 路径:File → Project Structure → Modules → Sources
  • 确保 Language level 明确选择 11 (Preview) - Local variable syntax for lambda parameters 或至少 11
  • ⚠️ 注意:仅设置为 “Project default” 不可靠,务必手动指定为 11

2. 编译器字节码目标版本(IDEA 编译器设置)

  • 路径:File → Settings → Build, Execution, Deployment → Compiler → Java Compiler
  • 设置 Target bytecode version 为 11
  • 同时确认 Project bytecode version(位于同一页面顶部)也为 11
    → 此项控制 IDEA 内置编译器生成的 .class 文件兼容性,若仍为 8 或未设置,java.time 类型将被忽略。

3. Maven 编译插件配置(pom.xml)

即使 IDE 配置正确,Maven 构建(如执行 testng.xml 时由 Maven 触发)仍会按 pom.xml 中定义的规则编译。必须显式声明源码与目标版本:


  
    
      org.apache.maven.plugins
      maven-compiler-plugin
      3.8.1 
      
        11
        11
        
        
      
    
  

? 验证是否生效?
执行以下任一操作后重新编译:

  • 在 IDEA 中点击 File → Reload project(针对 Maven 项目)
  • 终端运行 mvn clean compile,观察是否仍有编译错误
  • 在测试类中尝试 new Duration() —— 若无红线且可跳转到 java.time.Duration,即配置成功。

? 额外建议:

  • 检查 Project SDK 是否真正指向 JDK 11:File → Project Structure → Project → Project SDK
  • 避免混用 JRE 与 JDK:java.time 属于

    JDK 标准库,运行时必须使用完整 JDK(而非仅 JRE)
  • 若使用 IntelliJ 的内置构建(非 Maven),还需检查 Build → Build Tools → Maven → Importing 中的 JDK for importer 是否设为 JDK 11

完成上述三步后,driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)) 将正常编译与运行,java.time 包不再报错。核心原则是:JDK 版本、源码级别、字节码目标、构建工具配置,四者必须严格一致为 Java 11。