为了账号安全,请及时绑定邮箱和手机立即绑定

应用程序适用于wildfly,但不适用于tomcat

应用程序适用于wildfly,但不适用于tomcat

斯蒂芬大帝 2022-07-20 15:32:34
我创建了一个 Vaadin 应用程序,并且能够将其部署在 Wildfly 上,但是我无法将其部署在 Tomcat 8.5 上。当我尝试在 Tomcat 上部署它时出现以下错误:为什么会发生这种情况,我该如何解决?谢谢。我正在使用以下库,以防万一:import java.security.SecureRandom;import java.security.cert.X509Certificate;import javax.annotation.PostConstruct;import javax.enterprise.context.ApplicationScoped;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLContext;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;import javax.ws.rs.client.Client;import javax.ws.rs.client.ClientBuilder;import javax.ws.rs.client.WebTarget;import javax.ws.rs.core.MediaType;import javax.inject.Inject;import com.vaadin.flow.component.Composite;import com.vaadin.flow.component.HasElement;import com.vaadin.flow.component.Text;import com.vaadin.flow.component.orderedlayout.VerticalLayout;import com.vaadin.flow.router.BeforeEnterEvent;import com.vaadin.flow.router.BeforeEnterObserver;import com.vaadin.flow.router.Route;import com.vaadin.flow.server.VaadinRequest;
查看完整描述

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 等构建管理工具。


查看完整回答
反对 回复 2022-07-20
?
LEATH

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 组件。


查看完整回答
反对 回复 2022-07-20
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

嗨,我可以看到您的 jar byte-buddy-1.9.3.jar 出现问题,尝试将其从构建路径中删除,然后进入 eclipse 工作区并手动粘贴到项目的 lib 文件夹中,然后请刷新你的项目。希望这将纠正您的问题。



查看完整回答
反对 回复 2022-07-20
  • 3 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信