JOOQ 3.17.2搭配JDK18运行报错:无法访问java.util.concurrent.Flow
JDK18 + jOOQ 3.17.2 编译报错:找不到 java.util.concurrent.Flow 类
问题场景
使用IntelliJ IDEA,基于JDK18运行简单jOOQ数据库查询示例时编译失败,报错提示找不到java.util.concurrent.Flow类。Stack Overflow现有相关方案因版本差异(JDK18 + jOOQ 3.17.2)不适用。
代码片段
public static void connectToDb() { String userName = "root"; String password = ""; String url = "jdbc:mysql://localhost:3306/javaspark-db"; try (Connection conn = DriverManager.getConnection(url, userName, password)) { DSLContext dslContext = DSL.using(conn, SQLDialect.MYSQL); Author AUTHOR = Author.AUTHOR; // 此处select()触发编译报错 Result<Record> result = dslContext.select().from(AUTHOR).fetch(); for (Record r : result) { Integer id = r.getValue(AUTHOR.ID); String firstName = r.getValue(AUTHOR.FIRST_NAME); String lastName = r.getValue(AUTHOR.LAST_NAME); System.out.println("ID: " + id + " first name: " + firstName + " last name: " + lastName); } } // 简化异常处理 catch (Exception e) { e.printStackTrace(); } }
报错信息
/Users/xxxx/xxxx/todo-spark-app/src/main/java/app/Application.java:26:56 java: cannot access java.util.concurrent.Flow class file for java.util.concurrent.Flow not found
当前Maven依赖
<dependency> <groupId>org.jooq</groupId> <artifactId>jooq</artifactId> <version>3.17.2</version> </dependency> <dependency> <groupId>org.jooq</groupId> <artifactId>jooq-meta</artifactId> <version>3.17.2</version> </dependency> <dependency> <groupId>org.jooq</groupId> <artifactId>jooq-codegen</artifactId> <version>3.17.2</version> </dependency>
解决方案
1. 确认IntelliJ项目JDK配置
- 打开
File > Project Structure > Project Settings > Project - 确保
Project SDK选择JDK18,Project language level设置为18 - Records, pattern matching, etc. - 同步检查
Modules下的模块SDK和语言级别是否一致
2. 强制Maven使用JDK18编译
在pom.xml中添加maven-compiler-plugin配置,明确指定编译版本:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.10.1</version> <configuration> <source>18</source> <target>18</target> <release>18</release> </configuration> </plugin> </plugins> </build>
3. 补充MySQL JDBC驱动依赖
连接MySQL数据库需要对应JDBC驱动,在pom.xml中添加:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency>
4. 清理缓存并重新构建
- 执行
File > Invalidate Caches... > Invalidate and Restart重启IntelliJ - 在Maven面板执行
clean和compile命令重新构建项目
问题原因
java.util.concurrent.Flow是JDK9及以上版本自带的Reactive Streams API类,jOOQ 3.17.x在JDK9+环境下会依赖该类。报错本质是编译/运行环境的JDK版本不匹配(比如Maven默认使用了低于JDK9的版本),导致编译器找不到该类。
内容的提问来源于stack exchange,提问作者user2052668
相关产品推荐
相关产品推荐

