Springboot打包成war部署到tomcat中

末蓝、 2022-03-20 12:38 438阅读 0赞

基于SpringBoot的项目,可以直接运行main方法,在idea中进行调试开发非常方便,不用再新增tomcat服务,之前因为用惯了Jfinal以及SpringMVC框架,默认都是新增一个tomcat服务,选择项目,然后运行,所以下午手贱也尝试在基于maven的SpringBoot项目中添加tomcat服务调试运行,但是在网上查了好多资料,都没有看到有这方面的介绍,大多数都是如何打包成war然后发布到tomcat里独立运行,而不能像之前那样在idea里面直接运行tomcat调试。

在尝试新增webapp目录,新增web.xml文件,设置WEB-INF/classes等等各种设置之后,发现在idea里直接运行tomcat还是无法加载项目,因为tomcat是要根据web.xml识别web项目的,可是web.xml里什么配置都没有,如何能加载到项目?而且我发现out/artifacts下面的war之后几十k大小,这根本不正常,没有lib文件,肯定有问题,但是实在是找不到解决办法。只能郁闷的放弃,但是话又说回来,这样做其实也没有什么意义,毕竟直接运行main方法是更加方便的方式。

PS:不知道有没有像我这样不正常操作的同学操作成功的,或者知道具体怎么设置或者配置,如果有的话, 跪求赐教!!

最后尝试打包成war放到tomcat里运行,但是最开始tomcat一直会报下面的错误:

  1. ContainerBase.addChild: start:
  2. org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/s_customer]]
  3. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
  4. at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
  5. at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
  6. at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
  7. at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1095)
  8. at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1960)
  9. at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
  10. at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  11. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  12. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  13. at java.lang.Thread.run(Thread.java:745)
  14. Caused by: java.lang.NoClassDefFoundError: org/apache/tomcat/util/descriptor/tld/TldParser
  15. at org.apache.jasper.servlet.TldScanner.<init>(TldScanner.java:84)
  16. at org.apache.jasper.servlet.JasperInitializer.newTldScanner(JasperInitializer.java:118)
  17. at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:99)
  18. at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5506)
  19. at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
  20. ... 10 more
  21. Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.util.descriptor.tld.TldParser
  22. at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1854)
  23. at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1703)
  24. ... 15 more
  25. 二月 12, 2019 6:12:46 下午 org.apache.catalina.startup.HostConfig deployWAR
  26. 严重: Error deploying web application archive E:\tomcat7\webapps\s_customer.war
  27. java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/s_customer]]
  28. at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:905)
  29. at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
  30. at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
  31. at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1095)
  32. at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1960)
  33. at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
  34. at java.util.concurrent.FutureTask.run(FutureTask.java:266)
  35. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
  36. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
  37. at java.lang.Thread.run(Thread.java:745)

按照错误尝试了不少都没有成功,最后发现主要还是内部tomcat的依赖造成的问题,修改pom.xml

  1. <dependency>
  2. <groupId>org.apache.tomcat.embed</groupId>
  3. <artifactId>tomcat-embed-jasper</artifactId>
  4. <scope>provided</scope>
  5. </dependency>

参考资料

【1】org/apache/tomcat/util/descriptor/tld/TldParser错误解决

【2】把spring-boot项目部署到tomcat容器中

发表评论

表情:
评论列表 (有 0 条评论,438人围观)

还没有评论,来说两句吧...

相关阅读