天天看點

運作Maven項目時出現invalid LOC header (bad signature)錯誤,Tomcat不能正常啟動

作為Maven小白,今天這問題困擾了我好久,經過多次在網上查詢,終于找到了原因。明明一個小問題卻耗費很多時間,着實不應該,是以必須記錄一下。

報錯資訊如下:

對話框:

運作Maven項目時出現invalid LOC header (bad signature)錯誤,Tomcat不能正常啟動

控制台:

嚴重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/SpringMvcController]]
	at java.util.concurrent.FutureTask.report(Unknown Source)
	at java.util.concurrent.FutureTask.get(Unknown Source)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/SpringMvcController]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [[email protected]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4909)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5039)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 6 more
Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [[email protected]]
	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:139)
	at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:699)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 9 more
Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: invalid LOC header (bad signature)
	at org.apache.catalina.webresources.JarResourceSet.initInternal(JarResourceSet.java:96)
	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
	... 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(Unknown Source)
	at java.util.zip.ZipFile$ZipFileInputStream.read(Unknown Source)
	at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(Unknown Source)
	at java.util.zip.InflaterInputStream.read(Unknown Source)
	at sun.misc.IOUtils.readFully(Unknown Source)
	at java.util.jar.JarFile.getBytes(Unknown Source)
	at java.util.jar.JarFile.getManifestFromReference(Unknown Source)
	at java.util.jar.JarFile.getManifest(Unknown Source)
	at org.apache.catalina.webresources.JarResourceSet.initInternal(JarResourceSet.java:94)
	... 13 more

十一月 29, 2016 2:54:19 下午 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(Unknown Source)
	at java.util.concurrent.FutureTask.get(Unknown Source)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:769)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:625)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:924)
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:871)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 6 more

十一月 29, 2016 2:54:19 下午 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:154)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:625)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:769)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:439)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:924)
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 11 more

十一月 29, 2016 2:54:19 下午 org.apache.coyote.AbstractProtocol pause
資訊: Pausing ProtocolHandler ["http-nio-8080"]
十一月 29, 2016 2:54:19 下午 org.apache.coyote.AbstractProtocol pause
資訊: Pausing ProtocolHandler ["ajp-nio-8009"]
十一月 29, 2016 2:54:19 下午 org.apache.catalina.core.StandardService stopInternal
資訊: Stopping service Catalina
十一月 29, 2016 2:54:19 下午 org.apache.coyote.AbstractProtocol destroy
資訊: Destroying ProtocolHandler ["http-nio-8080"]
十一月 29, 2016 2:54:19 下午 org.apache.coyote.AbstractProtocol destroy
嚴重: Failed to destroy end point associated with ProtocolHandler ["http-nio-8080"]
java.lang.NullPointerException
	at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:305)
	at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:481)
	at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:823)
	at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:533)
	at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023)
	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
	at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:588)
	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
	at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:859)
	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)

十一月 29, 2016 2:54:19 下午 org.apache.coyote.AbstractProtocol destroy
資訊: Destroying ProtocolHandler ["ajp-nio-8009"]
十一月 29, 2016 2:54:19 下午 org.apache.coyote.AbstractProtocol destroy
嚴重: Failed to destroy end point associated with ProtocolHandler ["ajp-nio-8009"]
java.lang.NullPointerException
	at org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:305)
	at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:481)
	at org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:823)
	at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:533)
	at org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1023)
	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
	at org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:588)
	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
	at org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:859)
	at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:629)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:351)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:485)

           

  原因:

提取錯誤的關鍵資訊

運作Maven項目時出現invalid LOC header (bad signature)錯誤,Tomcat不能正常啟動

說明Jar包出現了問題。

那麼接下來就要找哪個jar包出現了問題:

方法1、可通過右擊項目名 ->  Run as -> Maven test ,這時控制台會報哪個jar包出錯。 (也可以打開DOS指令視窗,切換至項目目錄,運作mvn test指令,和Eclipse的控制台輸出資訊一緻)

方法2、如果方法1未出現任何錯誤資訊,那麼就使用笨辦法。打開項目中的pom.xml檔案,在自己的Maven本地倉庫去查找pom.xml檔案中每一個dependency節點所對應的jar包版本。一個一個對比,看看是否都正常下載下傳。 

這裡,我找到了本地倉庫中出現的jar包錯誤:

運作Maven項目時出現invalid LOC header (bad signature)錯誤,Tomcat不能正常啟動

解決方法:

既然jar包未下載下傳成功,那麼重新下載下傳就行了。如果重新下載下傳還是不能成功,那就在網上下載下傳同版本的拷貝進去。

删除掉該jar包所在目錄下的所有檔案後,重新運作maven install。

運作Maven項目時出現invalid LOC header (bad signature)錯誤,Tomcat不能正常啟動

這時,可看到jar包已正常下載下傳。

運作Maven項目時出現invalid LOC header (bad signature)錯誤,Tomcat不能正常啟動

再次運作項目,右擊項目 -> Run as -> Run on server 。可以發現,項目能正常運作了。