Java8升级至Java11后,Eclipse识别JBoss 8中Jakarta EL API依赖的冲突问题求助
各位大佬好,最近接手了一堆遗留代码的升级任务,头都快挠秃了😭。情况是这样的:
原本项目跑在JBoss 7.2、Java 8上,现在要升级到JBoss 8、Java 11,这就必须把javax相关组件全部替换成Jakarta的,结果卡在EL API的依赖问题上,折腾好几天都没搞定,来求助大家!
第一步遇到的找不到类问题
一开始Eclipse直接抛出一堆报错:
The type jakarta.el.ELException cannot be resolved. It is indirectly referenced from required type jakarta.faces.application.Application
The project was not built since its build path is incomplete. Cannot find the class file for jakarta.el.ELException. Fix the build path then try building this project
我想这不就是缺Jakarta EL的API包嘛,就把jakarta.el-api手动丢到WEB-INF/lib里了,结果新的幺蛾子又来了:
第二步遇到的包重复引用问题
刚加完包,Eclipse立刻报:
The package jakarta.el is accessible from more than one module: , jakarta.el
查了下才发现,JBoss runtime里已经内嵌了一个EL API包,路径是...\jakarta\el\api\main\jboss-el-api_5.0_spec-4.0.1.Final-redhat-00001.jar,和我手动加的包冲突了。
我试过的所有方法(全踩坑)
- 按网上通用解法,应该移除重复依赖,但我进Eclipse的Module Dependencies里找,根本看不到JBoss内嵌的那个API,只显示我自己加的那个。
- 试着移除我自己加的依赖,结果Eclipse提示只有系统模块才能这么操作,让我从模块路径移除——这道理我懂,但还是抱着侥幸试了,结果直接回到第一个“找不到类”的报错。
- 干脆把WEB-INF/lib里的
jakarta.el-api删掉,结果Eclipse又变回一开始的“无法解析ELException”的死循环。
我的真实诉求
其实我根本不想自己加这个包!就想直接用JBoss runtime里已经自带的那个版本,但就是不知道怎么让Eclipse正确识别到它!现在完全卡壳:自己加包就冲突,不加就找不到类。
对了,报错是出在类的包声明那一行,但所有import语句本身都没标红,给大家贴一下相关的代码片段:
package maintenance.jsf.custom.scopes; import java.beans.FeatureDescriptor; import java.util.Collections; import java.util.Iterator; import java.util.Map; import java.util.logging.Logger; import jakarta.el.ELContext; import jakarta.el.ELResolver; import jakarta.el.PropertyNotFoundException; import jakarta.faces.context.FacesContext; public class CustomScopeELResolver extends ELResolver { // 类的实现代码此处省略,核心是依赖引用问题 }
有没有大佬遇到过类似的坑?求指点怎么让Eclipse乖乖用JBoss runtime里的EL API版本啊!
内容来源于stack exchange

