我想将我的应用程序部署到版本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>
如果您想在生产环境中的Tomcat 7上运行您的webapp,那么您应该在测试环境中使用Tomcat 7。
发生的事情是,您意外地引入了对EL 3.0 API的依赖。。。并将其包含在您的POM文件中。它正在Tomcat 8上运行。但在Tomcat7上,平台支持EL2.1。因此,当你的应用程序试图加载javax的类文件时。艾尔。ELManager
。。。它失败了。
解决:
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冲突
这个问题是由javax/el/ELManager
类在elapi
3.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 (我想这意味着编译器找不到我的类!)
描述 (Description) 它表示视图元素的cached jQuery object 。 一个方便的引用,而不是一直重新包装DOM元素。 语法 (Syntax) view.$el 例子 (Example) <!DOCTYPE html> <html> <head> <title>View Example</title> <script src = "https
描述 (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解析;