ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Tomcat에 War 올릴때) java.lang.NoClassDefFoundError: org/apache/tomcat/util/descriptor/tld/TldParse
    IT/에러노트 2019. 5. 29. 08:57

    에러상황

    스프링부트를 War로 만들어 톰캣에 직접 올리려고 하는데

    서버는 실행되는데 아래와같은 에러코드를 남겨놓고 서버가 돌아갔다.

     

     

    6월 14, 2017 2:26:41 오후 org.apache.catalina.core.ContainerBase addChildInternal

    심각: ContainerBase.addChild: start:

    org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/CompareTable]]

            at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)

            at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)

            at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)

            at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)

            at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1092)

            at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1984)

            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

            at java.util.concurrent.FutureTask.run(FutureTask.java:266)

            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

            at java.lang.Thread.run(Thread.java:745)

    Caused by: java.lang.NoClassDefFoundError: org/apache/tomcat/util/descriptor/tld/TldParser

            at org.apache.jasper.servlet.TldScanner.<init>(TldScanner.java:84)

            at org.apache.jasper.servlet.JasperInitializer.newTldScanner(JasperInitializer.java:120)

            at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:101)

            at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5623)

            at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)

            ... 10 more

    Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.util.descriptor.tld.TldParser

            at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892)

            at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)

            ... 15 more

     

    6월 14, 2017 2:26:41 오후 org.apache.catalina.startup.HostConfig deployWAR

    심각: Error deploying web application archive D:\tomcat\webapps\CompareTable.war

    java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/CompareTable]]

            at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:903)

            at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)

            at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)

            at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1092)

            at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1984)

            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

            at java.util.concurrent.FutureTask.run(FutureTask.java:266)

            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

            at java.lang.Thread.run(Thread.java:745)

     

     

     

     

    localhost:8080로 접속해보면 톰캣고양이는 제대로 나오지만,

    war로 만들었던 프로젝트가 실행되지 않았다.

     

     

     

     

     


    해결방안

    Caused by: java.lang.NoClassDefFoundError: org/apache/tomcat/util/descriptor/tld/TldParser

    를 주목하고 TldParser를 찾아보니 톰캣8이상에 내포된 기능(?) 라이브러리(?) 이다.

     

    현재 구동하는 톰캣은 7이다.

    그러니 저걸 못찾는다.

    톰캣8을 다운받아 다시 실행해보니 제대로 실행된다.

     

     

     

     


    출처 및 참고내용 

    아래는 검색하다가 찾게 된 어떤 블로그의 관련자료의 일부 내용이다.

     


    현재 오픈소스로 개발 중인 설치형 블로그를 서버에 올려서 테스트하기 위해서

    jenkins를 사용해 자동 배포 설정을 하고 외장 톰캣을 사용하려고 했는데 문제가 생겼다.

    현재 개발 중인 프로젝트는 spring boot를 사용하는데 boot 버전마다 기본 톰캣 버전이 다르다.

    기본적으로 boot는 내장 톰캣을 사용하는데, 서버에 올려서 사용할 때 외장 톰캣을 사용하기 위해서

    톰캣7으로 테스트 했는데 위와 같은 에러가 발생했다.

    정확히 문제가 무엇이냐면 boot가 버전마다 내장 톰캣 버전이 다르기 때문에 발생하는 에러다.

    • spring boot 1.2.4 이상 : 내장 톰캣8
    • spring boot 1.2.4 이하 : 내장 톰캣7

    출처 : http://blog.woniper.net/274

    댓글

다치지 말고 운동하자.