Eclipse构建路径报错:org.apache.commons.lang3包多模块可访问问题
解决Eclipse中“The package org.apache.commons.lang3 is accessible from more than one module”报错(已放classpath仍生效的情况)
我之前也碰到过一模一样的棘手问题——明明已经把commons-lang3的jar包放到classpath里了,还是弹出这个模块冲突的报错,折腾了好一阵才找到几个有效的解决方向,分享给你:
排查隐式引入的模块化依赖:
很多时候我们手动加了普通的commons-lang3 jar,但Maven/Gradle可能自动拉取了带module-info.class的模块化版本(比如较新的commons-lang3版本默认是模块化的),导致两个来源的包冲突。打开你的pom.xml(Maven项目)或build.gradle(Gradle项目),搜索commons-lang3,检查是否有重复依赖,或者依赖的jar是否是模块化版本。如果是,要么排除掉模块化的依赖项,要么统一使用非模块化的旧版本(比如3.8.1及之前的版本没有module-info)。清理Eclipse缓存并重建项目:
Eclipse的缓存经常会“犯浑”,哪怕你改了配置也不生效。试试这几步:- 右键项目 →
Maven→Update Project(Maven项目),勾选Force Update of Snapshots/Releases后确认 - 或者点击顶部菜单栏
Project→Clean,选中你的项目清理后,再执行Project→Build All - 更彻底的话,可以删除项目根目录下的
.settings、.classpath文件夹和target(或bin)编译目录,然后重新导入项目
- 右键项目 →
检查JRE系统库的模块配置:
如果你的项目使用Java 9+,JRE的模块设置可能会干扰classpath。右键项目 →Build Path→Configure Build Path,找到JRE System Library点击Edit:- 确认是否选择了
Use an execution environment JRE而非Alternate JRE,避免JRE本身的模块路径引入冲突 - 若之前不小心把JRE放到了modulepath,改成classpath模式试试
- 确认是否选择了
处理项目的module-info.java文件:
如果你的项目根目录有module-info.java文件(说明是模块化项目),这很可能是冲突根源:- 如果项目不需要模块化,直接删除这个文件,项目会自动切换回非模块化模式,只使用classpath中的jar包
- 如果必须使用模块化,要在
module-info.java中明确添加requires org.apache.commons.lang3;,同时确保没有其他地方引入该包的重复依赖
内容的提问来源于stack exchange,提问作者Nitish Bala
相关产品推荐
相关产品推荐

