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.<init>(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
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
参考资料
【1】org/apache/tomcat/util/descriptor/tld/TldParser错误解决
【2】把spring-boot项目部署到tomcat容器中
还没有评论,来说两句吧...