Springboot打包成war部署到tomcat中

基于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一直会报下面的错误:

 ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/s_customer]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1095)
	at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1960)
	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.(TldScanner.java:84)
	at org.apache.jasper.servlet.JasperInitializer.newTldScanner(JasperInitializer.java:118)
	at org.apache.jasper.servlet.JasperInitializer.onStartup(JasperInitializer.java:99)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5506)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 10 more
Caused by: java.lang.ClassNotFoundException: org.apache.tomcat.util.descriptor.tld.TldParser
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1854)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1703)
	... 15 more

二月 12, 2019 6:12:46 下午 org.apache.catalina.startup.HostConfig deployWAR
严重: Error deploying web application archive E:\tomcat7\webapps\s_customer.war
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/s_customer]]
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:905)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1095)
	at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1960)
	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)

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


    org.apache.tomcat.embed
    tomcat-embed-jasper
    provided

参考资料

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

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

你可能感兴趣的:(后端)