从Java 8升级到Java 17时javax.sql.DataSource报错求助
Java 8升级到Java 17后javax.sql.DataSource注入报错的解决方法
这个报错是因为Java 9引入模块化系统后,java.sql模块已经内置了javax.sql包,而项目中可能同时存在外部依赖提供的同名包,导致模块冲突。以下是具体解决步骤:
移除重复的javax.sql依赖
Java 17的java.sql模块已经包含javax.sql的所有内容,无需再引入单独的javax.sql-api或其他包含该包的依赖。- Maven项目:检查
pom.xml,直接删除独立的javax.sql-api依赖;如果是其他依赖间接引入的,通过<exclusions>排除:<dependency> <groupId>你的依赖组ID</groupId> <artifactId>你的依赖 artifactID</artifactId> <exclusions> <exclusion> <groupId>javax.sql</groupId> <artifactId>javax.sql-api</artifactId> </exclusion> </exclusions> </dependency> - Gradle项目:在依赖中排除冲突的模块:
dependencies { implementation('你的依赖') { exclude group: 'javax.sql', module: 'javax.sql-api' } }
- Maven项目:检查
调整Eclipse模块路径配置
- 右键项目 → 选择
Properties→ 进入Java Build Path→ 切换到Modules标签页 - 检查列表中是否有多个模块导出
javax.sql包,确保仅保留java.sql模块 - 如果项目未使用模块化(无
module-info.java),勾选Allow modules to read from unnamed module选项,消除类路径与模块路径的冲突
- 右键项目 → 选择
清理重建项目
- 执行
Project→Clean,清理项目编译缓存 - Maven项目右键选择
Maven→Update Project;Gradle项目执行Gradle→Refresh Gradle Project - 重启Eclipse,确保配置生效
- 执行
内容的提问来源于stack exchange,提问作者Krishnachandran E S
相关产品推荐
相关产品推荐

