最近在维护和升级公司的老项目,出现了一连串的几个bug;
记录一个重要的bug,这是走过的坑,笑着也要找出来。。。
将jdk1.6更改为1.7之后,重新配置,项目是可以跑起来的,没啥问题。
但,当update maven之后,jdk版本变成默认的1.5的了。
在解决jdk版本问题后,又出现了一个bug : Server Tomcat v7.0 Server at localhost failed to start
经过尝试好几种方法,终于解决。
这是第一个bug。
在使用Maven构建项目时,生成的maven项目jdk默认使用的是jdk1.5。
在手动修改了jdk之后,update project之后jdk又会变为1.5.
或者用eclipse的Maven插件生成的也是1.5
对于这种情况有两种办法,一是修改settings.xml,二是修改pom文件
1、配置settings.xml
打开 settings.xml 文件并编辑它(一般放在你的仓库目录目录) :
jdk-1.8
true
1.8
1.8
1.8
1.8
找到
修改Eclipse中的设置,使配置生效。
2、配置pom.xml文件
在
org.apache.maven.plugins
maven-compiler-plugin
1.7
配置完成后,需要执行一次更新项目配置的动作。选中项目 –> 右键 –> Maven –> Update Project
方法一是全局生效,方法二只对本项目生效。
改完之后,再次运行项目。发现又一个bug。
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/rds-szrcb-web]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:188)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1119)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1571)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1561)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/rds-szrcb-web]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
... 6 more
Caused by: java.lang.NoClassDefFoundError: Lorg/slf4j/Logger;
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Class.java:2509)
at java.lang.Class.getDeclaredFields(Class.java:1819)
at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106)
at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:270)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:139)
at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:65)
at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:417)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:891)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:388)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5522)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 6 more
Caused by: java.lang.ClassNotFoundException: org.slf4j.Logger
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)
... 20 more
一月 29, 2019 9:24:38 上午 org.apache.catalina.core.ContainerBase startInternal
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.util.concurrent.FutureTask.get(FutureTask.java:188)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1119)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:300)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:444)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:756)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
at org.apache.catalina.startup.Catalina.start(Catalina.java:693)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1571)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1561)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1127)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 6 more
一月 29, 2019 9:24:38 上午 org.apache.catalina.startup.Catalina start
严重: The required Server component failed to start so Tomcat is unable to start.
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
at org.apache.catalina.startup.Catalina.start(Catalina.java:693)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:294)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:428)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:756)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:444)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1127)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:300)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
... 11 more
于是,在网上进行寻找答案
bug1:
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/rds-szrcb-web]]
网上办法:
方法一:
1.把你工作空间文件夹下的如下路径打开:
然后删除 .snap 文件,我在eclipse打开的情况下有这个.snap文件
2.把你工作空间文件夹下的如下路径打开:
删除里面的temp*文件夹,删除后重启eclipse,tomcat就可以用了。
3.在server视图窗口中 把tomactt删除 然后再从新添加tomcat 之后再重新在启动你的web项目
4.打开任务管理器,找到javax.exe,右键结束进程,重启eclipse,tomcat就可以用了
方法二:
启动tomcat的时候报Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext。 虽然说你启动tomcat运行的项目可能只有一个,但是tomcat会对之前部署到它容器的工程,不知道有没有说错。报这个错,我发现我以前部署的工程影响到了现在的tomcat运行,我为了远程部署到linux tomcat中,对本地开发环境的工程进行了重命名。解决问题是删除之前部署的这个工程,重启即可。
或直接修改tomcat的server.xml文件的相关报错工程的Context接点删除。
方法三:
遇到这个问题的有很多种情况
第一种:web.xml问题,这个只要好好检查一下代码就可以解决网上大部分都是这个的问题
servlet-mapping中的
/
第二种:maven仓库下有的jar包下载不完全的问题错误信息中,我挑选重要的一段,我在项目中需要的也是这个问题,最后在不懈的努力下解决了,特写下这篇博客为后来遇到错误的人!
Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: invalid LOC header (bad signature) at org.apache.catalina.webresources.JarResourceSet.initInternal(JarResourceSet.java:139) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107) ... 12 more Caused by: java.util.zip.ZipException: invalid LOC header (bad signature) at java.util.zip.ZipFile.read(Native Method) at java.util.zip.ZipFile.access$1400(ZipFile.java:60) at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:717) at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:419) at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158) at sun.misc.IOUtils.readFully(IOUtils.java:65) at java.util.jar.JarFile.getBytes(JarFile.java:425) at java.util.jar.JarFile.getManifestFromReference(JarFile.java:193) at java.util.jar.JarFile.getManifest(JarFile.java:180) at org.apache.catalina.webresources.JarResourceSet.initInternal(JarResourceSet.java:137) ... 13 more
出现这类问题首先我们查看哪些包没下载完全
第一步:再pom.xml文件右键run as选择Maven test看是否报错,从报错信息中看缺失的包,如果没有报错,则进入第二步
第二步:在pom.xml文件下右键,run as选择maven build,再Goals下输入以下命令:clean install -U
运行,会有很多报错信息,在这些错误信息中我找到了我缺失的包
[WARNING] 读取C:\Users\PC\.m2\repository\org\springframework\spring-jdbc\4.3.12.RELEASE\spring-jdbc-4.3.12.RELEASE.jar时出错; invalid LOC header (bad signature) [WARNING] 读取C:\Users\PC\.m2\repository\org\springframework\spring-aspects\4.3.12.RELEASE\spring-aspects-4.3.12.RELEASE.jar时出错; invalid LOC header (bad signature) [WARNING] 读取C:\Users\PC\.m2\repository\javax\servlet\jstl\1.2\jstl-1.2.jar时出错; invalid LOC header (bad signature) [WARNING] 读取C:\Users\PC\.m2\repository\org\aspectj\aspectjweaver\1.8.9\aspectjweaver-1.8.9.jar时出错; invalid LOC header (bad signature)
显示有4个jar包没安装成功,我们只需要找到对应的目录,之后删掉那个文件夹
最后右键项目重新下载jar包
方法四:(上面几种方法对我都没有生效,这种方法之后,就可以了,很特殊)
最后发现,原因是编译发布的时候,找不到slf4j-api-1.6.2.jar,
Java Build Path里面有,而Deployment Assembly 没有。
将之前的Maven Dependencies去掉,重新添加,再运行,就可以了。
出现bug的时候,细心去发现,一步步走,总会找到的。
这个bug,对我来说也是几经周折,因为没有想到是在发布项目的时候,一些依赖没有被引进,导致怎么找都没找到,我也是很无语的。