Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tomcat 7 java.lang.NoClassDefFoundError:javax/el/ELManager_Java_Spring_Hibernate_Maven - Fatal编程技术网

Tomcat 7 java.lang.NoClassDefFoundError:javax/el/ELManager

Tomcat 7 java.lang.NoClassDefFoundError:javax/el/ELManager,java,spring,hibernate,maven,Java,Spring,Hibernate,Maven,我想将我的应用程序部署到版本7中的tomcat,我得到以下异常java.lang.NoClassDefFoundError:javax/el/ELManager 但如果我尝试将此应用程序部署到tomcat版本8,它就可以正常工作 你有办法解决这个问题吗 为什么我要从tomcat 8切换到7?在测试环境中,repo中是tomcat8,服务器上是tomcat7 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:x

我想将我的应用程序部署到版本7中的tomcat,我得到以下异常
java.lang.NoClassDefFoundError:javax/el/ELManager
但如果我尝试将此应用程序部署到tomcat版本8,它就可以正常工作

你有办法解决这个问题吗

为什么我要从tomcat 8切换到7?在测试环境中,repo中是tomcat8,服务器上是tomcat7

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>certplatform</groupId>
<artifactId>certplatform</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.7.0</version>
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin>
  <plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.0.0</version>
    <configuration>
      <warSourceDirectory>WebContent</warSourceDirectory>
    </configuration>
  </plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring- 
core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring- 
context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring- 
context-support -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring- 
webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-web 
-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.0.4.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>

<!--https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/javax.servlet.jsp.jstl-api -->
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>javax.servlet.jsp.jstl-api</artifactId>
    <version>1.2.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.mail/mail -->
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.5.0-b01</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.0.8.Final</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.2.15.Final</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.2.15.Final</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.2.1</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.59</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpkix-jdk15on</artifactId>
    <version>1.59</version>
</dependency>   

<!-- https://mvnrepository.com/artifact/javax.el/javax.el-api -->
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>3.0.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/javax.el/el-api -->
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>el-api</artifactId>
    <version>2.2</version>
</dependency>   

4.0.0
证书平台
证书平台
0.0.1-快照
战争
src
maven编译器插件
3.7.0
1.8
1.8
maven战争插件
3.0.0
网络内容
org.springframework
弹簧芯
5.0.4.1发布
org.springframework
spring上下文
5.0.4.1发布
org.springframework
spring上下文支持
5.0.4.1发布
org.springframework
SpringWebMVC
5.0.4.1发布
org.springframework
弹簧网
5.0.4.1发布
javax.servlet
jstl
1.2
javax.servlet.jsp.jstl
javax.servlet.jsp.jstl-api
1.2.1
javax.mail
邮件
1.5.0-b01
org.hibernate
休眠验证器
6.0.8.1最终版本
org.hibernate
冬眠核心
5.2.15.1最终版本
org.hibernate
休眠实体管理器
5.2.15.1最终版本
org.postgresql
postgresql
42.2.1
org.bouncycastle
bcprov-jdk15on
1.59
org.bouncycastle
bcpkix-jdk15on
1.59
javax.el
javax.el-api
3.0.0
javax.el
埃尔api
2.2

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">

<display-name>spring-mvc-demo</display-name>

<!-- Spring MVC Configs -->

<!-- Step 1: Configure Spring MVC Dispatcher Servlet -->
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-mvc-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<!-- Step 2: Set up URL mapping for Spring MVC Dispatcher Servlet -->
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

SpringMVC演示
调度员
org.springframework.web.servlet.DispatcherServlet
上下文配置位置
/WEB-INF/spring-mvc-servlet.xml
1.
调度员
/

如果您想在生产环境中在Tomcat 7上运行Web应用程序,那么您应该在测试环境中使用Tomcat 7

发生的事情是,您意外地引入了对EL 3.0 API的依赖性。。。并将其包含在您的POM文件中。它正在Tomcat8上运行。但是在Tomcat7上,平台支持EL2.1。因此,当您的应用程序尝试加载
javax.el.ELManager
的类文件时。。。它失败了

解决方案:

  • 将您的生产平台升级到Tomcat 8
  • 将开发和测试平台降级为Tomcat7,并从代码库中消除对更新API的任何依赖
该页面列出了Tomcat每个主要版本的各种规范版本


这个问题没有解决的可能吗

如果您准备“屠宰”Tomcat7服务器,您可能能够用一个更新的实现替换EL实现。但我不会尝试,因为1)它可能根本不起作用,2)结果很难维持。您有责任让您的运营、质量保证和/或安全团队大吃一惊

是否不可能通过更改应用程序来解决此问题

好吧,这是不可能的

我想您可以尝试用以下内容替换EL依赖项:

<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>3.0.0</version>
</dependency>

javax.el
javax.el-api
3.0.0
但它不起作用。根据Alex的评论:


将JAR添加到应用程序POM中并不能解决任何问题。下面是Tomcat引导打印出来的消息:“validateJarFile(C:\Software\apache-Tomcat-7.0.99\webapps\leonardo flows services\WEB-INF\lib\javax.el-api-3.0.0.JAR)-JAR未加载。参见Servlet规范3.0,第10.7.2节。有问题的类:javax/el/Expression.class”。它与其lib-jar冲突


这个问题是由这样一个事实引起的:这个类
javax/el/ELManager
是在
elapi
3.0版中引入的

(缺少该类)它在运行时选择该类,而不是el api jar

因此存在
javax/el/ELManager


如果您能够尽可能近距离地同步您的dev/test/prod环境,那就最好了


当您的测试环境中有Tomcat8时,在dev中针对Tomcat8进行开发就更有意义了。正如您发现的那样,Tomcat 7和8服务器带有不同的库集,因此您的代码可以针对这些不同的库集执行不同的操作。

这个问题是由于javax.el-api版本3.0中引入了此类javax/el/ELManager造成的。Tomcat7附带了预绑定的el api 2.2(缺少该类),它在运行时选择它,而不是el api jar。你有权使用Tomcat吗?你能升级吗?谢谢你提供的信息。升级是可能的,但随后我不再担心tomcat也会在下一个操作系统更新周期更新。是的,我有访问tomcat的权限。如果您能够尽可能近距离地同步您的dev/test/prod环境,那就最好了。当您的测试环境中有Tomcat8时,在dev中针对Tomcat8进行开发就更有意义了。正如您发现Tomcat7和8服务器带有不同的库集,因此您的代码可以针对不同的库集表现出不同的行为。我完全同意您的看法。我天真地认为回购协议包含相同的RPM,但我错了。没有可能解决这个问题吗?我已经在回答中总结了这些评论。谢谢你的回答!将JAR添加到应用程序POM并不能解决任何问题。这里是Tomcat引导打印出来的消息:“validateJarFile(C:\Software\apache-Tomcat-7.0.99\webapps\leonardo flows services\WEB-INF\lib\javax.el-api-3.0.0.jar)-jar未加载。请参阅Servlet Spec 3.0,第10.7.2节。有问题的类:javax/el/Expression.class”。它与其lib jar冲突。除了升级之外,还有什么解决方案?@sitakant-降级测试平台。