当前位置: 首页 > 知识库问答 >
问题:

Tomcat 7 java。lang.NoClassDefFoundError:javax/el/ELManager[重复]

阎善
2023-03-14

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

你有办法解决这个问题吗?

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

波姆。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>   

网状物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>

共有2个答案

姬承教
2023-03-14

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

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

解决:

  • 将您的生产平台升级到Tomcat 8
  • 将您的html" target="_blank">开发和测试平台降级为Tomcat 7,并从您的代码库中消除对新API的任何依赖。

Apache Tomcat版本页面列出了Tomcat每个主要版本的各种规范版本。

这个问题不可能解决吗?

如果您准备“屠宰”Tomcat 7服务器,您也许可以用一个新的替换EL实现。但我不会尝试这样做,因为1)它可能根本不起作用,2)结果可能很难维持。你有责任让你的操作、质保和/或安全团队中风!

应用程序的更改是否没有可能解决这个问题?

好吧,这是不可能的。

我想你可以试着用这个替代EL依赖:

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

但它不起作用。根据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。它与它的lib-jar冲突

龚志文
2023-03-14

这个问题是由javax/el/ELManager类在elapi3.0版中引入这一事实引起的。

Tomcat 7将提供预捆绑的el-api 2.2(它缺少这个类),它将在运行时选择它,而不是你的el-api jar。

Tomcat 8具有el api 3.0,因此存在javax/el/ELManager类。

最好是尽可能地同步dev/test/prod环境。

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

 类似资料:
  • 我正在使用Spring工具套件在Spring中开发一个webapp。如果我在那里使用IDE构建应用程序并将其部署到提供的关键tc服务器上,它就可以正常工作。但是,如果我手动构建“MVN clean Package”并尝试将其部署到独立的Tomcat服务器(使用最新的Tomcat7),则会引发以下异常: 编辑更多信息: 将添加到似乎可以修复关于未在开始时加载的警告。仍然存在问题。 我检查了tomca

  • 我创建了一个java应用程序来从Gmail地址读取。当我从IDE(Intellij)执行脚本时,脚本运行完美。但是通过生成jar文件并尝试执行jar: 我有以下错误: 这是我的POM文件:

  • 我有一个本体文件,正在使用OWL-API。我应该为我的类(#Doc)检索她的个人和他们的对象属性 实际上我尝试了两种方法来获取个人,但我总是遇到以下错误: 线程“main”java中出现异常。lang.NoClassDefFoundError:javax/inject/Provider (我想这意味着编译器找不到我的类!)

  • $el

    描述 (Description) 它表示视图元素的cached jQuery object 。 一个方便的引用,而不是一直重新包装DOM元素。 语法 (Syntax) view.$el 例子 (Example) <!DOCTYPE html> <html> <head> <title>View Example</title> <script src = "https

  • el

    描述 (Description) 它定义了要用作视图引用的元素。 this.el是根据视图的tagName , className , id和attributes属性创建的(如果已指定)。 如果没有, el是一个空div 。 语法 (Syntax) view.el 例子 (Example) <!DOCTYPE html> <html> <head> <title>View Ex

  • 问题内容: 我发现以下陈述: ](https://addyosmani.com/backbone-fundamentals/#getting-set-up) 另外,我读到:该属性等效于,并且等效于。在TodoView示例的render方法中,我们看到用于设置元素的HTML,并用于查找类“edit”的子元素。 问题答案: 和之间有什么区别? 该视图属性 可以从DOM选择器字符串或Element解析;