4
votes

Tomcat Causé par: java.util.zip.ZipException: erreur lors de l'ouverture du fichier zip

J'ai un projet spring mvc, mais il jette Causé par: java.util.zip.ZipException: erreur lors de l'ouverture du fichier zip lorsque je l'exécute par Tomcat. Comment déterminer quel fichier jar n'a pas été chargé correctement. J'ai ajouté -verbose: class aux options de la VM, mais il n'imprime que le jar chargé, pas celui d'erreur.
Version Tomcat: apache-tomcat-8.5.23
Version JDK: jdk1.8.0_152
Version Spring: 4.3.3.RELEASE

Le msg d'ERREUR est ci-dessous:

org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/hello-world]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
    at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1739)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:482)
    at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:431)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
    at com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)
    at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
    at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
    at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1408)
    at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
    at sun.rmi.transport.Transport$1.run(Transport.java:200)
    at sun.rmi.transport.Transport$1.run(Transport.java:197)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [org.apache.catalina.webresources.StandardRoot@c078b65]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4860)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4995)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 44 more
Caused by: org.apache.catalina.LifecycleException: Failed to initialize component [org.apache.catalina.webresources.JarResourceSet@186802b8]
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:113)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
    at org.apache.catalina.webresources.StandardRoot.startInternal(StandardRoot.java:724)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 47 more
Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: error in opening zip file
    at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:113)
    at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
    ... 50 more
Caused by: java.util.zip.ZipException: error in opening zip file
    at java.util.zip.ZipFile.open(Native Method)
    at java.util.zip.ZipFile.<init>(ZipFile.java:225)
    at java.util.zip.ZipFile.<init>(ZipFile.java:155)
    at java.util.jar.JarFile.<init>(JarFile.java:166)
    at java.util.jar.JarFile.<init>(JarFile.java:103)
    at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:110)
    ... 51 more


3 commentaires

Pouvez-vous publier des journaux de catalina.out? Vous pouvez probablement trouver plus de détails en consultant le fichier journal. Voir également ce lien lien . Il contient plus de détails sur le réglage fin de votre journalisation pour en savoir plus sur la cause de ce problème.


catalina.out est similaire à ce journal de sortie. J'ai utilisé la commande de Luis pour résoudre ce problème.


de plus, cette erreur peut également se produire en raison de fichiers jar de zéro Ko dans web-inf / lib


3 Réponses :


7
votes

Étant donné que vous avez accès à un terminal Bash, vous pouvez essayer ce one-liner pour tester vos jars en supposant qu'ils se trouvent tous dans le même répertoire

/path/to/lib/test.jar jar is broken
/path/to/lib/some.jar jar is broken

Résultat:

for j in $(find /path/to/lib -name '*.jar'); do jar -tvf $j > /dev/null 2>&1; [ "$?" -ne 0 ] && echo "$j jar is broken"; done


2 commentaires

Cette commande découvre beaucoup de pots cassés , et j'ai exclu ceux de pom un par un. Merci!


de plus, cette erreur peut également se produire en raison de fichiers jar de zéro Ko dans web-inf / lib



1
votes

Ceci est un fil plus ancien, mais je viens de rencontrer ce problème. Il s'avère que si vous empaquetez votre application en utilisant tar (plutôt que de créer un fichier war) sur Mac OS et que vous l'extrayez ensuite sur un serveur Linux, vous obtiendrez un "._libraryX.jar" pour chaque "libraryX. pot". Malheureusement, parce que Tomcat essaie de charger tous les fichiers jar de votre répertoire lib, il récupère ces fichiers supplémentaires qui ne sont pas du tout des fichiers jar. Ils contiennent des données d'attributs de fichiers étendus souhaités par Mac OS.

Vous devez créer le fichier tar comme celui-ci pour garder ces fichiers hors de votre archive.

COPYFILE_DISABLE=1 tar -cvzf mytomcatapp.tgz mytomcatapp


0 commentaires

1
votes

Cette exception se produit lorsque votre fichier war est endommagé. Non seulement les fichiers jar, mais également d'autres fichiers du fichier war peuvent être endommagés. Dans mon cas, j'ai trouvé un fichier png endommagé et après l'avoir supprimé, le fichier de guerre s'est déployé avec succès. Afin de trouver le fichier endommagé, utilisez cette commande:

jar xvf yourApp.war

En exécutant la commande, le nom de chaque fichier extrait sera imprimé et lorsqu'il atteindra le fichier endommagé, il imprime l'exception. Vous pouvez donc le trouver facilement.


0 commentaires