启动tomcat报错:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.jasper.el.ELContextImpl
java.lang.NoClassDefFoundError: Could not initialize class org.apache.jsp.index_jsp
等错误
开始以为是缺少jar或者jar冲突。运行页面只要有EL表达式的都报Could not initialize class org.apache.jasper.el.ELContextImpl这个错误
然后就继续修改pom.xml ,都知道tomcat自身有servler等jar包
我使用的是springboot,我用的外部tomcat,所以要在pom排除springboot自身的tomcat,然后需要添加servler等jar包。
<!-- <scope>provided</scope>解决tomcat部署时与tomcat本身的jar冲突 -->
<!--引入Servlet开始 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!--引入Servlet结束 -->
<!--引入JSTL开始 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
jar冲突的几率很大。
各种修改之后,但实际并不是这里的和tomcat的jar冲突,但凭经验讲,肯定是哪里的jar和tomcat的冲突了
于是大工程来了,每个pom依赖都试,删除再试,最后找到了。
问题在activiti工作流里面引用的jar冲突了。不管是springboot还是普通springmvc项目,如果用activiti6.x版本都会用到juel-spi这个东西
查找过程:eclipse开发工具 ctrl+鼠标点击activiti那个依赖,相关activiti依赖的页面,
再ctrl+鼠标点击engine
最后点击上图圈出来的,就看到了引入了
这里就不再进去点击了,有兴趣的再点击可以进去看看,里面引入了很多很多东西
查看引入pom依赖的方式,也可以直接按一下方式查看,pom文件点击红色框按钮菜单栏
第一种解决方式:tomcat换成7和activiti换成5.x
第二种:排除juel-spi这个和tomcat自身的jar的冲突
我用的第二种:
<!-- activiti -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>6.0.0</version>
<exclusions>
<!-- 排除juel-spi,会和tomcat下的servlet、jsp等jar有冲突 -->
<exclusion>
<groupId>de.odysseus.juel</groupId>
<artifactId>juel-spi</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
<exclusion>
<groupId>de.odysseus.juel</groupId>
<artifactId>juel-api</artifactId>
</exclusion>
</exclusions>
</dependency>
启动项目,成功。不报错了。正常访问。累死了~这个报错毫无任何和activiti关联的征兆
出现这个的问题也不排除其他的依赖会和tomcat冲突报这个错。我的是activiti引起的。