java.lang.IllegalArgumentException: неверный или нечитаемый WAR-файл: ошибка при открытии zip-файла - PullRequest
15 голосов
/ 31 марта 2011


Я получил эту ошибку в Catalina.2011-03-30.log, когда мой файл display.war выполнялся на Tomcat.Ошибка показана ниже:

Mar 30, 2011 8:01:31 PM org.apache.catalina.startup.ContextConfig init  
SEVERE: Exception fixing docBase for context [/Display]   
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:114)
    at java.util.jar.JarFile.<init>(JarFile.java:135)
    at java.util.jar.JarFile.<init>(JarFile.java:72)
    at sun.net.www.protocol.jar.URLJarFile.<init>(URLJarFile.java:72)
    at sun.net.www.protocol.jar.URLJarFile.getJarFile(URLJarFile.java:48)
    at sun.net.www.protocol.jar.JarFileFactory.get(JarFileFactory.java:70)
    at sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:104)
    at sun.net.www.protocol.jar.JarURLConnection.getJarFile(JarURLConnection.java:71)
    at org.apache.catalina.startup.ExpandWar.expand(ExpandWar.java:148)
    at org.apache.catalina.startup.ContextConfig.fixDocBase(ContextConfig.java:886)
    at org.apache.catalina.startup.ContextConfig.init(ContextConfig.java:1021)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:279)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.StandardContext.init(StandardContext.java:5602)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4378)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500)
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1345)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:303)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
    at java.lang.Thread.run(Thread.java:662)  

Mar 30, 2011 8:01:31 PM org.apache.catalina.core.StandardContext resourcesStart
SEVERE: Error starting static Resources  

java.lang.IllegalArgumentException: Invalid or unreadable WAR file : error in opening zip file  
    at org.apache.naming.resources.WARDirContext.setDocBase(WARDirContext.java:135)  
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4249)  
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4418)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:546)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:905)
    at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:740)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:500)
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1345)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:303)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1337)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
    at java.lang.Thread.run(Thread.java:662)  

Заранее спасибо.

Ответы [ 14 ]

17 голосов
/ 31 марта 2011

К сожалению, причина и решение не , что очевидно , как Бухаке Синди предлагает . Я видел эту проблему несколько раз раньше на нескольких форумах. Я даже сам испытал это хотя бы один раз. В настоящее время Google дает более 500 обращений к сообщению об исключении точный . Все остается без ответа. Однако есть намеки на то, что он работает в IDE X, но не в IDE Y и что он работает на сервере X, но не на сервере Y. Или что удаление или добавление что-то из / в WAR работает (a Типичный пример можно найти здесь ). Никто, однако, не объяснил истинную причину в глубине.

Я думаю , что это как-то связано с комбинацией используемой версии JDK / JRE и размера файла WAR. Вот несколько вещей, которые вы можете попробовать:

  • Попробуйте обновить / настроить версию JDK / JRE в среде IDE и / или сервера приложений.
  • Попробуйте добавить что-нибудь в WAR, какой-нибудь случайный файл JAR или JSP или что-то еще, а затем пересоберите.
8 голосов
/ 23 января 2014

Я случайно столкнулся с ошибкой. Я думаю, что причина довольно проста.

Это может произойти, когда вы создаете файл WAR и переносите его в каталог tomcat с помощью «медленного» процесса. В моем случае это перевод с удаленной машины по scp. Кот может заметить, что файл изменился (дата изменения и т. Д.) До окончания передачи. Затем он может попытаться развернуть неполный файл. Это столкнется с ошибкой почтового индекса.

То же самое теоретически может произойти, если вы копируете файл из другого каталога; хотя шансы меньше, так как копия быстрее.

Чтобы вообще избежать ошибки, файл следует переместить (не скопировать) из другого места на том же диске. Такой ход является (я думаю) атомным.

Пока я занимаюсь разработкой, возникновение ошибки время от времени не является большой проблемой; когда я сталкиваюсь с этим, я просто перезапускаю передачу.

5 голосов
/ 27 февраля 2012

Если вы развертываете в Linux, убедитесь, что пользователь может прочитать его как процесс tomcat.Запустите "chmod + r" в файле war, чтобы добавить права на чтение для всех.

3 голосов
/ 05 мая 2015

Я столкнулся с этой проблемой, я ничего не добавил и не изменил в своей сборке. Но я думаю, что моя проблема возникла, потому что я непосредственно загружал свой военный файл в удаленный каталог tomcat7/webapps/.

Решение вашего военного файла в промежуточный каталог, например /home/yourusername или что-то еще, затем перейдите в каталог webapps. Вероятно, для меня эта проблема возникла из-за того, что файл еще не был полностью загружен и tomcat пытался извлечь / развернуть его.

Надеюсь, это кому-нибудь поможет.

3 голосов
/ 27 июля 2011

Та же проблема здесь. Военный файл можно открыть с помощью 7-zip.

Редактировать : Я понял, почему. «Неверный или нечитаемый WAR-файл: ошибка при открытии zip-файла» - определенно сбивающее с толку сообщение об ошибке. Настоящая причина в том, что Tomcat не может развернуть войну из-за ошибок инициализации. В моем случае в моем файле War отсутствуют несколько файлов конфигурации, которые выбрасывают исключение не найденный файл. Другая версия Tomcat, похоже, сообщает о разных ошибках. На 6.0.26 он правильно сообщает об ошибке. Но на 6.0.32 он сообщает сбивающий с толку «Неверный или нечитаемый файл WAR».

1 голос
/ 12 мая 2015

я сталкивался с одной и той же проблемой много раз, и, наконец, я нашел решение .. точное решение во всяком случае, я использовал Tomcat 8.0.9 локально для тестирования и при загрузке файла войны на сервер я получил сообщение об ошибке с разархивированием войны .. поэтому я проверил сервер Tomcat, и это было 6, поэтому я установил эту версию и проверил версию Java на сервере и нашел его 5, поэтому я также убедился, что я использую версию 5 на моей локальной машине. проблема связана с тем, как упаковывается файл war, поэтому, если вы используете ту же версию и tomcat, он будет упакован правильно, чтобы сервер мог понять ... другое решение .. обновите версию сервера, чтобы она соответствовала той, которую вы используете локально. они должны быть одинаковыми. надеюсь, что это решит вашу проблему.

0 голосов
/ 28 апреля 2017

Спасибо @BalusC.Была такая же проблема.Перепробовал много вариантов.Думал, что это из-за lib, который я добавил в maven без области действия прототипа, и в результате он также перешел к файлу war, исправил тот же результат.Я могу открыть его как почтовый индекс, и там все «хорошо» выглядит.

Пробовал локально (другая версия tomcat: 7.0.67 по сравнению с 7.0.22, с которой у меня возникла проблема), работает хорошо.Потом попробовал с 7.0.22 но на разных ВМ (экземпляр) - работает хорошо.Я подозреваю, что есть что-то с tomcat или, возможно, конфликт с другими файлами был (это разница только с другими виртуальными машинами, все, включая Java, то же самое).

Для меня проблема решена с использованием другого экземпляра tomcat.

0 голосов
/ 03 февраля 2017

В моем случае я использовал WinSCP для передачи файла. Я пытался много раз со всеми предложениями, описанными здесь. Все, что я сделал, чтобы это заработало, это перезапустил WinSCP, и кот мог прочитать файл.

0 голосов
/ 21 января 2016

У меня была такая же проблема (java.lang.IllegalArgumentException: Invalid or unreadable WAR file).Для меня причина была в том, что я включил catalina-6.0.43.jar в мой файл WAR.Чтобы избавиться от ошибки, я создал новый WAR-файл, который не включал этот jar-файл, а затем Tomcat 7 смог успешно запустить приложение.К сожалению, это решение работает только для Tomcat 7. Я все еще получаю ту же ошибку при попытке развернуть точно такой же WAR на Tomcat 8.

0 голосов
/ 23 мая 2012

BalusC прав. Я столкнулся с этой ошибкой, когда запустил свое веб-приложение на компьютере с Linux, на котором вместо обычного JDK была установлена ​​версия openjdk Java. После установки обычного JDK и указания переменной JRE_HOME tomcat на обычный JDK проблема исчезла.

...