Resteasy: java.lang.NoClassDefFoundError: javax/servlet/ServletContext
Resteasy: java.lang.NoClassDefFoundError: javax/servlet/ServletContext
我在 web.xml
中配置了 Resteasy servlet 和监听器
<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<!-- Auto scan REST service -->
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<!-- this should be the same URL pattern as the servlet-mapping property -->
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/rest</param-value>
</context-param>
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
</servlet>
当我尝试在 JBoss-as-web-7.0.0.Final 上部署 EAR 时,出现错误:
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap:
java.lang.NoClassDefFoundError: javax/servlet/ServletContext
我的 EAR 包含 war 和 EJB jar,如果它有意义的话。
1) 您需要在您的项目中添加 servlet api 依赖项,如下所示:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
或
在类路径中添加 javax.servlet-3.0.jar
文件。
2)转到<JBOSS-HOME>/standalone/configuration/standalone.xml
找到元素
<subsystem xmlns="urn:jboss:domain:ee:1.0" />
并替换为
<subsystem xmlns="urn:jboss:domain:ee:1.0">
<global-modules>
<module name="javaee.api" slot="main"/>
</global-modules>
</subsystem>`
3) 转到
JBoss\jboss-eap-6.1\modules\system\layers\base\javax\servlet\api\main
包含 JAR
jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-1.jar
我建议您只使用 Jboss AS 7.1。1.Final 版本而不是 7.0.0 Final。
我在 web.xml
中配置了 Resteasy servlet 和监听器<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<!-- Auto scan REST service -->
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<!-- this should be the same URL pattern as the servlet-mapping property -->
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/rest</param-value>
</context-param>
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>
<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
</servlet-class>
</servlet>
当我尝试在 JBoss-as-web-7.0.0.Final 上部署 EAR 时,出现错误:
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap: java.lang.NoClassDefFoundError: javax/servlet/ServletContext
我的 EAR 包含 war 和 EJB jar,如果它有意义的话。
1) 您需要在您的项目中添加 servlet api 依赖项,如下所示:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
或
在类路径中添加 javax.servlet-3.0.jar
文件。
2)转到<JBOSS-HOME>/standalone/configuration/standalone.xml
找到元素
<subsystem xmlns="urn:jboss:domain:ee:1.0" />
并替换为
<subsystem xmlns="urn:jboss:domain:ee:1.0">
<global-modules>
<module name="javaee.api" slot="main"/>
</global-modules>
</subsystem>`
3) 转到
JBoss\jboss-eap-6.1\modules\system\layers\base\javax\servlet\api\main
包含 JAR
jboss-servlet-api_3.0_spec-1.0.2.Final-redhat-1.jar
我建议您只使用 Jboss AS 7.1。1.Final 版本而不是 7.0.0 Final。