You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat8.5+WELD3搭建JSF2.3/CDI2项目遇废弃API警告求解决

搞定WELD-000146废弃API警告的几个办法

嘿,这个警告我之前也碰到过,本质是Mojarra(JSF的官方实现)里的com.sun.faces.flow.FlowDiscoveryCDIHelper类还在沿用CDI 1.1就被废弃的老API,而你用的WELD 3是CDI 2.x的实现,所以启动时就会弹出这个提示。下面给你几个靠谱的解决方向:

1. 升级Mojarra到适配CDI 2.x的版本

你现在的pom里只加了JSF的API依赖,没加具体的实现包(Mojarra),这首先得补上。而且旧版本的Mojarra确实没适配CDI 2,得升级到修复了这个问题的版本(一般2.3.10及以后的Mojarra版本都搞定了这个废弃API的调用)。

在pom.xml里更新JSF相关依赖:

<!-- JSF API 接口 -->
<dependency>
    <groupId>javax.faces</groupId>
    <artifactId>javax.faces-api</artifactId>
    <version>2.3</version>
    <scope>provided</scope>
</dependency>

<!-- Mojarra 官方JSF实现 -->
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.faces</artifactId>
    <version>2.3.19</version> <!-- 选最新的2.3.x稳定版就行 -->
    <scope>compile</scope>
</dependency>

要是你的Tomcat容器里已经提前放了Mojarra的jar包,记得把上面实现依赖的<scope>改成provided,避免版本冲突哦。

2. 让WELD直接忽略这个警告

如果暂时没法升级Mojarra,也可以直接让WELD屏蔽这个特定警告。在项目的src/main/resources/META-INF目录下新建一个jboss.properties文件,往里加一行:

org.jboss.weld.bootstrap.warning.ignore=WELD-000146

这样WELD启动时就会自动跳过这个警告信息了。

3. 确认WELD和CDI的版本匹配

别忘了检查WELD版本和CDI 2.x的兼容性——WELD 3.x是专门对应CDI 2.0的,别不小心用成WELD 4.x(那是给CDI 3.0/Jakarta EE 9+用的)。比如可以用这个稳定的WELD 3.x依赖:

<dependency>
    <groupId>org.jboss.weld.servlet</groupId>
    <artifactId>weld-servlet-shaded</artifactId>
    <version>3.1.9.Final</version>
    <scope>compile</scope>
</dependency>

最后说一句

其实这个警告只是个“提醒”,不会影响应用正常运行。但从长期维护的角度看,优先升级Mojarra到适配版本是最好的选择,毕竟废弃API早晚可能被移除嘛。

内容的提问来源于stack exchange,提问作者Jens Fuchs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:39:09