3 回答
TA贡献1824条经验 获得超5个赞
正如您在堆栈跟踪中看到的那样,问题是在 Tomcat 上您会得到一个
java.lang.ClassNotFoundException: javax.enterprise.inject.spi.BeanManager
它适用于 Wildfly 但不适用于 Tomcat 的事实是因为 Wildfly 是一个已经包含许多库的应用程序服务器(取决于您使用的版本)。Java EE Full & Web Distribution in Version 16.0.0.Final 例如包含库 cdi-api-2.0.SP1.jar(在 wildfly-16.0.0.Final\modules\system\layers\base\javax\enterprise\api 下\main) 其中包含 BeanManager 类。因此找到了该类并且它可以工作。
Tomcat 是一个默认不包含 EE-Libraries 的 Web 服务器。因此,在部署到 Tomcat 时,您必须确保包含 javax.enterprise.inject.spi.BeanManager 类的库在部署到 tomcat 时位于类路径上。
包含该类的库是https://mvnrepository.com/artifact/javax.enterprise/cdi-api/2.0.SP1并且根据您使用的项目类型,您可以添加 maven/gradle 依赖项,例如
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<version>2.0.SP1</version>
</dependency>
(使用 maven 时)或下载 jar 文件并将其放入您的自我管理库中,而不使用 maven 等构建管理工具。
TA贡献1936条经验 获得超6个赞
在 WildFly、Payara、TomEE、WebSphere、GlassFish 等上运行的应用程序通常不能移植到 Tomcat。所有这些服务器都提供了Java(™) EE 7 规范 API的实现。这些服务器的较新版本实现了Java(TM) EE 8 Specification API,其中包括 Servlet 4.0 API。
Tomcat 8.5 仅实现Servlet 3.1 API - Apache Tomcat 8.5.38。如果您查看此内容并将其与上述任一内容进行比较,您将了解 Tomcat 缺少多少内容。
我相信 TomEE、GlassFish 和 Payara 都包含正确集成的 Tomcat 组件。
TA贡献1783条经验 获得超4个赞
嗨,我可以看到您的 jar byte-buddy-1.9.3.jar 出现问题,尝试将其从构建路径中删除,然后进入 eclipse 工作区并手动粘贴到项目的 lib 文件夹中,然后请刷新你的项目。希望这将纠正您的问题。
添加回答
举报