異常處理_Maven之web項目java.lang.LinkageError

瀏覽器運行項目異常以下:java

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.LinkageError: loader constraint violation: when resolving interface method "javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;" the class loader (instance of org/apache/jasper/servlet/JasperLoader) of the current class, org/apache/jsp/index_jsp, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, javax/servlet/jsp/JspApplicationContext, have different Class objects for the type p.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory; used in the signature
	org.apache.jsp.index_jsp._jspInit(index_jsp.java:31)
	org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:49)
	org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:181)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:96)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.22 logs.

剛看到該異常有點蒙,Ljavax/el/ExpressionFactory什麼鬼,個人servlet-api.jar和jsp-api.jar都有啊python

<dependency>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>servlet-api</artifactId>
  <version>6.0.37</version>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.1</version>
</dependency>  

經過網上的解釋是tomcat1.7中的servlet-api.jar包,jsp-api.jar等與本身lib中的jar有所衝突apache

給的解決方案就是去掉本身項目中lib中衝突的jar包api

可是問題又來了,那本身的是maven項目重啓不就找不到相關jar包了嗎,啓動不就報錯了嗎瀏覽器

好吧,那我就設置包的做用範圍爲providedtomcat

<dependency>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>servlet-api</artifactId>
  <version>6.0.37</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.1</version>
  <scope>provided</scope>
</dependency>

從新發布,啓動tomcat,運行,成功,謝謝老天app

PS_Maven_scope:jsp

在POM 4中,<dependency>中<scope>,它主要管理依賴的部署,目前<scope>能夠使用5個值
  * compile: 缺省值,適用於全部階段,會隨着項目一塊兒發佈
  * provided: 相似compile,指望JDK、容器或使用者會提供這個依賴,如servlet.jar
  * runtime: 只在運行時使用,如JDBC驅動,適用運行和測試階段
  * test: 只在測試時使用,用於編譯和運行測試代碼,不會隨項目發佈
  * system: 相似provided,須要顯式提供包含依賴的jar,Maven不會在Repository中查找它
相關文章
相關標籤/搜索