maven tomcat plugin 踩坑記

今天在本身家裏的電腦上改一個項目,安裝的是社區版的 IntelliJ Idea, 沒有辦法安裝 Tomcat 插件來啓動項目。嘗試用 jettry runer 啓動,結果報java

java.lang.IncompatibleClassChangeError: class org.eclipse.jetty.annotations.AnnotationParser$MyClassVisitor has interface 
org.objectweb.asm.ClassVisitor as super class 

在網上找了半天也沒解決,因而改成用 maven-tomcat-plugin,配置很簡單,以下:web

<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.2</version>
</plugin>

運行也簡單,命令行執行:apache

mvn tomcat7:run

不過立刻就報錯了,提示:api

Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/catalina/loader/WebappClassLoader) previously initiated loading for a different type with name "javax/servlet/ServletContext"

提示很明顯看出來是 servlet-api 版本不兼容。解決方法爲,將 pom.xml 裏的 servlet-api 改成 provided,不然項目啓動時與 tomcat 內置 servlet 衝突。再次運行,又報錯了:tomcat

Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application
[/demo-web] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies.
The class hierarchy being processed was [org.jaxen.util.AncestorOrSelfAxisIterator->org.jaxen.util.AncestorAxisIterator->
org.jaxen.util.AncestorOrSelfAxisIterator]

多運行了幾回,發現有 3 次成功,2 次報上面的錯,網上找到的解釋 tomcat啓動時檢測到循環繼承而棧溢出的問題,將項目傳遞依賴的 jaxen exclude 以後從新運行成功。app

相關文章
相關標籤/搜索