java.lang.NoClassDefFoundError:javax/el/ELManager

Jac*_*mok 21 java tomcat noclassdeffounderror maven

我正在使用Spring Tool Suite在Spring上开发一个webapp.如果我使用IDE在所提供的Pivotal tc服务器上构建和部署应用程序,它就可以正常工作.但是,如果我执行手动"mvn clean package"构建并尝试将其部署到独立的Tomcat服务器(使用最新的Tomcat 7),则会引发以下异常:

2017-08-23 15:24:13 WARN  AnnotationConfigWebApplicationContext:551 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerAdapter' defined in org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]: Factory method 'requestMappingHandlerAdapter' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcValidator' defined in org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/el/ELManager
2017-08-23 15:24:13 ERROR DispatcherServlet:502 - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappingHandlerAdapter' defined in org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]: Factory method 'requestMappingHandlerAdapter' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcValidator' defined in org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/el/ELManager
Run Code Online (Sandbox Code Playgroud)

经过进一步检查,它确实抱怨几条线以上没有加载罐子:

sie 23, 2017 3:24:12 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive D:\Apache-Tomcat-7.0\webapps\TestApp-0.0.1-SNAPSHOT.war
sie 23, 2017 3:24:12 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(D:\Apache-Tomcat-7.0\webapps\TestApp-0.0.1-SNAPSHOT\WEB-INF\lib\el-api-2.2.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/el/Expression.class
sie 23, 2017 3:24:12 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(D:\Apache-Tomcat-7.0\webapps\TestApp-0.0.1-SNAPSHOT\WEB-INF\lib\javax.servlet-api-3.1.0.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
sie 23, 2017 3:24:12 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(D:\Apache-Tomcat-7.0\webapps\TestApp-0.0.1-SNAPSHOT\WEB-INF\lib\tomcat-el-api-8.0.21.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/el/Expression.class
2017-08-23 15:24:13 INFO  ContextLoader:304 - Root WebApplicationContext: initialization started
Run Code Online (Sandbox Code Playgroud)

我的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>com.exmaple.mvc</groupId>
  <artifactId>TestApp</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.3.10.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.3.10.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.3.10.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.3.10.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.6.6</version>
    </dependency>
    <dependency>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>
       <version>1.2.17</version>
       <exclusions>
        <exclusion>
            <artifactId>jms</artifactId>
            <groupId>javax.jms</groupId>
        </exclusion>
        <exclusion>
            <artifactId>jmxri</artifactId>
            <groupId>com.sun.jmx</groupId>
        </exclusion>
        <exclusion>
            <artifactId>jmxtools</artifactId>
            <groupId>com.sun.jdmk</groupId>
            </exclusion>
        </exclusions>
    </dependency>
        <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mockito/mockito-all -->
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.9.5</version>
        <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>2.3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.1.Final</version>
    </dependency>

    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
    </dependency>
  </dependencies>

    <build>
        <plugins>
            <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>
        </plugins>
    </build>

</project>
Run Code Online (Sandbox Code Playgroud)

这种行为的原因是什么?我该如何解决这个问题?

编辑更多信息:

添加<scope>provided</scope>到javax.servlet-api似乎解决有关的警告javax.servlet-api一开始没有被加载.问题el-api仍然存在.

我已经检查了tomcat/lib目录,它已经包含el-api.jar在其中,这可能就是为什么它告诉我它不会加载我在pom.xml中列出的那个.问题是,添加<scope>provided</scope>也没有解决它.无论我做什么,它仍然抱怨给我同样的java.lang.NoClassDefFoundError: javax/el/ELManager错误.

解

除了上面关于javax.servlet-api问题的编辑部分之外el-api,我el-api在2.2版本中运行了一个带有jar 的Tomcat 7 .缺少的类是在el-api 3.0中引入的.在Tomcat 8中运行相同的webapp(使用el-api 3.0 jar)可以正常运行.

Jen*_*ens 22

你错过了javax.el-api依赖.加:

<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>3.0.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

到你的pom.xml

  • 我需要它在Tomcat 7上运行.任何方法都可以这样做? (9认同)
  • 这解决了我的问题.在Tomcat 8(当前最新版本8.5.20)上运行它可以正常工作.它提供的el-api是3.0版本.将此标记为答案.如果您愿意,您可以补充一点,问题实际上是因为我使用较旧的el-api运行Tomcat 7. (5认同)
  • @JacekŚlimok 这个类是在 3.0 版本中引入的。所以2.2中不可用 (3认同)
  • 我以前试过。问题是 - 我仍然收到这个错误,再加上 tomcat 告诉我就像之前一样,它在开始部署应用程序时无法加载 `el-api` jar。当我查看 tomcat/lib 目录时,它已经包含了`el-api.jar`,这可能是它告诉我它不会加载我在 pom.xml 中列出的那个的原因。问题是,添加 `&lt;scope&gt;provided&lt;/scope&gt;` 也不能解决它。无论我做什么,它仍然抱怨给我同样的 `java.lang.NoClassDefFoundError: javax/el/ELManager` 错误。 (2认同)

小智 11

Hibernate Validator 6.x -> Bean Validation 2.0 (JSR 380) -> EL3.0

Hibernate Validator 5.x -> Bean Validation 1.1 (JSR 349) -> EL2.2

Bean 验证 1.0 (JSR 303) ->(我不确定)

所以,它也会影响其他版本(tomcat、jdk、jsp、servlet)

比如tomcat7,如果要使用Hibernate Validator,应该使用Hibernate Validator 5.x、el 2.2(以及servlet 3.0、jsp 2.2和jdk 6+)


小智 9

将 hibernate-validator 降级到版本 5,它可以在 Tomcat 7 中正常工作。在我的情况下,我将下一个依赖项添加到我的 pom:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.4.3.Final</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

或者您可以将更新的 el-api.jat 添加到 tomcat lib 文件夹。


小智 5

请参考Hibernate 验证“无法初始化 javax.el.E​​xpressionFactory”错误

用

<dependency>
   <groupId>org.glassfish</groupId>
   <artifactId>javax.el</artifactId>
   <version>3.0.1-b08</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

32014 次

最近记录:

7 年,7 月 前