猿问

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

我创建了一个 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;


斯蒂芬大帝
浏览 140回答 3
3回答

沧海一幻觉

正如您在堆栈跟踪中看到的那样,问题是在 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>&nbsp; &nbsp; <groupId>javax.enterprise</groupId>&nbsp; &nbsp; <artifactId>cdi-api</artifactId>&nbsp; &nbsp; <version>2.0.SP1</version></dependency>(使用 maven 时)或下载 jar 文件并将其放入您的自我管理库中,而不使用 maven 等构建管理工具。

LEATH

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

慕娘9325324

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

相关分类

Java
我要回答