Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.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
NoClassDefFoundError:javax/el/ELManager_Java_Maven_Tomcat_Noclassdeffounderror - Fatal编程技术网

NoClassDefFoundError:javax/el/ELManager

NoClassDefFoundError:javax/el/ELManager,java,maven,tomcat,noclassdeffounderror,Java,Maven,Tomcat,Noclassdeffounderror,我正在使用Spring工具套件在Spring中开发一个webapp。如果我使用IDE在提供的关键tc服务器上构建并部署应用程序,它就可以正常工作。但是,如果我手动构建“mvn clean package”,并尝试将其部署到独立的Tomcat服务器(使用最新的Tomcat 7),则会引发以下异常: 2017-08-23 15:24:13 WARN AnnotationConfigWebApplicationContext:551 - Exception encountered during co

我正在使用Spring工具套件在Spring中开发一个webapp。如果我使用IDE在提供的关键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
经进一步检查,它确实抱怨上面几行没有装罐:

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
My 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>

4.0.0
com.exmaple.mvc
特斯塔普
0.0.1-快照
战争
org.springframework
弹簧芯
4.3.10.1发布
org.springframework
SpringWebMVC
4.3.10.1发布
org.springframework
弹簧网
4.3.10.1发布
org.springframework
弹簧试验
4.3.10.1发布
org.slf4j
slf4j-log4j12
1.6.6
log4j
log4j
1.2.17
jms
javax.jms
jmxri
com.sun.jmx
jmxtools
com.sun.jdmk
jstl
jstl
1.2
朱尼特
朱尼特
4.12
测试
org.mockito
莫基托所有
1.9.5
测试
公地郎
公地郎
2.3
org.hibernate
休眠验证器
6.0.1.最终版本
javax.servlet
javax.servlet-api
3.1.0
org.apache.maven.plugins
maven编译器插件
3.1
1.8
1.8
这种行为的原因是什么?我该如何解决

编辑更多信息:

提供的
添加到
javax.servlet api
似乎修复了关于
javax.servlet api
未在开始时加载的警告。el api的问题仍然存在

我检查了tomcat/lib目录,它已经包含
elapi.jar
,这可能就是为什么它告诉我它不会加载pom.xml中列出的目录。问题是,添加所提供的
也无法修复它。无论我做什么,它都会抱怨给我同样的
java.lang.NoClassDefFoundError:javax/el/ELManager
错误

解决方案


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

您将错过作为依赖项的
javax.el api
。加:

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

javax.el
javax.el-api
3.0.0
有关pom.xml的详细信息,请参阅

使用


玻璃鱼
javax.el
3.0.1-b08
就我而言, 注释掉这个依赖项

<!-- <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.8.Final</version>
    </dependency> -->

并补充说

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

javax.el
javax.el-api
3.0.0
假如
这解决了我的问题

请尝试以下操作:

  • javax.el
    javax.el api
    添加到pom.xml中
  • 如果您有不同的类加载器(在使用OSGi时经常如此),则需要临时将上下文设置为包含实现的上下文。用以下内容结束您的通话:

    ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
    try {
      Class<?> currentClass = this.getClass(); // or any class that is in a bundle with the dependency 
      Thread.currentThread().setContextClassLoader(currentClass.getClassLoader());
      // execute library call
    } finally {
      Thread.currentThread().setContextClassLoader(originalClassLoader); // back to original context
    }
    

    查看
    javax.el.FactoryFinder.find(..)
    的源代码以了解更多信息

    我正在使用Tomcat 7.0.9,由于公司的官僚作风,无法更改为任何更新的版本。将EL作为依赖项导入也无法解决此问题


    在Tomcat的根文件夹->库中,我用新的3.0(来自本地
    .m2\repository\javax\el\javax.el api\3.0.0
    )替换了旧的el api(2.2版本)。然后,正确地隔离tomcat的依赖项(如图所示)使我的WAR能够正确地部署在tomcat 7.0.9上,Hibernate Validator 6.x->Bean Validation 2.0(JSR 380)->EL3.0

    HibernateValidator 5.x->BeanValidation 1.1(JSR349)->EL2.2

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

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


    例如tomcat7,如果您想使用Hibernate验证器,应该使用Hibernate验证器5.x、el 2.2(以及servlet 3.0、jsp 2.2和jdk 6+)

    将Hibernate验证器降级到版本5,它可以与tomcat7一起正常工作。 在我的例子中,我向pom添加了下一个依赖项:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.4.3.Final</version>
    </dependency>
    
    
    org.hibernate
    休眠验证器
    5.4.3.最终版本
    

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

    为拥有tomcat 7并试图应用所选答案的用户添加我的答案

    如果添加依赖项对您没有帮助,您将继续获得

    java.lang.NoClassDefFoundError: javax/el/ELManager
    
    这是因为Tomcat7不允许您使用
    javax.*
    包中的对象加载更现代的jar。它将打印到日志中:

    jakarta.el-3.0.3.jar-未加载jar。参见Servlet规范3.0,第10.7.2节。有问题的类:javax/el/Expression.class


    解决方案是要么升级Tomcat,要么将hibernate验证器降级到最新的5.x版本。另一个(我的POV不太喜欢)选项是尝试替换tomcat7/lib文件夹中的JAR。

    这有帮助吗@GhostCat解决了加载
    javax.servlet-api-x.y.z.jar
    的问题,即将
    提供的
    添加到
    javax.servlet api
    。然而,我仍在与
    elapi
    问题作斗争。下面的答案下面的评论中有更多信息。如果有人想对Tomcat7进行暴力补丁,我就是这样做的,与本主题(v2.2到v3.x el-api.jar和el-impl.jar)中的故事相同,我以前也尝试过。问题是,我仍然很清楚
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>5.4.3.Final</version>
    </dependency>
    
    java.lang.NoClassDefFoundError: javax/el/ELManager