Java.lang.IllegalArgumentException: Неверный или нечитаемый WAR файл: ошибка при открытии zip файла
Я получил эту ошибку в 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)
Спасибо заранее.
Ответы
Ответ 1
К сожалению, причина и решение не так очевидны как предлагает Бухаке Синди. Я несколько раз видел эту проблему на нескольких форумах. Я даже испытал это сам по крайней мере один раз. Google дает в настоящее время более 500 просмотров в сообщении точное исключение. Все остается без ответа. Однако есть подсказки, что он работает в среде IDE X, но не на IDE Y, и что он работает на сервере X, но не на сервере Y. Или что удаление или добавление чего-либо из/в работу WAR (типичный пример можно найти здесь). Однако никто не объяснил глубину истинной основной причины.
Я думаю, что это имеет какое-то отношение к комбинации используемой версии JDK/JRE и размера файла WAR. Вот несколько вещей, которые вы можете попробовать:
- Попробуйте обновить/выровнять версию JDK/JRE в среде IDE и/или приложений.
- Попробуйте добавить что-то в WAR, какой-нибудь случайный JAR или JSP файл или что-то еще, а затем перестроить.
Ответ 2
Я случайно столкнулся с ошибкой. Я думаю, что причина довольно проста.
Это может произойти, когда вы создаете файл WAR и переносите его в каталог tomcat с помощью "медленного" процесса. В моем случае это переход от удаленной машины по scp. Tomcat может заметить, что файл был изменен (дата изменения и т.д.) До завершения передачи. Затем он может попытаться развернуть неполный файл. Он столкнется с ошибкой zip.
То же самое можно сказать и теоретически, если вы скопируете файл из другого каталога; хотя шансы меньше, так как копия быстрее.
Чтобы вообще избежать ошибки, файл должен быть перемещен (не скопирован) из другого места на том же диске. Такой ход (я думаю) атомный.
Пока я развиваюсь, возникновение ошибки происходит каждый раз в то время, но это не большая проблема; когда я сталкиваюсь с этим, я просто перезапускаю передачу.
Ответ 3
Если вы развертываете в Linux, убедитесь, что пользователь читает, что процесс tomcat работает как. Запустите "chmod + r" в файл войны, чтобы добавить права на чтение всем.
Ответ 4
Такая же проблема. файл войны можно открыть с помощью 7-zip.
Изменить. Я понял, почему. "Неверный или нечитаемый WAR файл: ошибка при открытии zip файла", безусловно, представляет собой запутанное сообщение об ошибке. Настоящая причина - просто "Tomcat не может развернуть войну, потому что есть некоторые ошибки инициализации". В моем случае у моего файла War отсутствует несколько файлов конфигурации, которые вызывают исключение, не найденное в файле. Кажется, что разные версии Tomcat сообщают о разных ошибках. В 6.0.26 он корректно сообщает об ошибке. Но в версии 6.0.32 он сообщает о запутанном "Неверном или нечитаемом файле WAR".
Ответ 5
Я столкнулся с этой проблемой, я ничего не добавлял и ничего не модифицировал для своей сборки. Но я думаю, что моя проблема возникла из-за того, что я напрямую загружал свой файл войны в удаленный каталог tomcat7/webapps/
.
Решение вашего военного файла в промежуточном каталоге, например /home/yourusername
, или что-то, затем перейдите в каталог webapps
. Вероятно, для меня эта проблема возникла из-за того, что файл еще не был полностью загружен, а tomcat пытался извлечь/развернуть его.
Надеюсь, это поможет кому-то.
Ответ 6
Я сталкиваюсь с той же проблемой много раз, и, наконец, я нашел решение.. точное решение
в любом случае я использовал Tomcat 8.0.9 локально для тестирования и при загрузке файла войны на сервер я получил сообщение об ошибке с распаковкой войны.. поэтому я проверил сервер Tomcat, и мне было 6, поэтому я установил эту версию и проверил версию Java на сервере и нашел его 5, поэтому я также убедился, что я использую версию 5 на своей локальной машине.
проблема связана с тем, как упаковывается файл войны, если вы используете ту же версию и tomcat, что она будет упакована правильно, чтобы сервер мог понять...
другое решение.. обновите версию сервера, чтобы она соответствовала той, которую вы используете локально.
они должны быть одинаковыми.
надеюсь, что это решит вашу проблему.
Ответ 7
Определенная проблема Aby, похоже, решена, но в случае, если кто-то другой натыкается на эту страницу с той же проблемой, что у меня был...
Убедитесь, что в каталоге /opt/solr установлены соответствующие разрешения. Я продолжал следовать SolrJetty, прежде чем переходить к установке Tomcat. Поскольку мой пользователь solr был создан с помощью этой команды:
useradd -d /opt/solr -s /sbin/false solr
каталог/opt/solr был создан с разрешениями 700, поэтому tomcat не смог попасть в файл WAR. Перейдите на 755, и он отлично работает.
Ответ 8
В моем случае это было повреждение файла во время передачи файла. Следовательно, всегда рекомендуется проверять контрольную сумму файла всякий раз, когда мы передаем его на удаленный сервер.
Ответ 9
Убедитесь, что ваш путь к файлу WAR верен. У меня была опечатка, и у меня была такая же ошибка.
Ответ 10
BalusC прав. Я столкнулся с этой ошибкой, когда я запустил мой webapp на ящике Linux, где была установлена версия openjdk для Java вместо обычного JDK. После установки нормальной JDK и указательной переменной JRE_HOME в обычный JDK проблема исчезла.
Ответ 11
У меня была та же проблема (java.lang.IllegalArgumentException: Invalid or unreadable WAR file
). Для меня причина в том, что я включил catalina-6.0.43.jar
в мой WAR файл. Чтобы избавиться от ошибки, я создал новый WAR файл, который не включал эту банку, а Tomcat 7 смог успешно запустить приложение. К сожалению, это решение работает только для Tomcat 7. Я все еще получаю ту же ошибку, когда пытаюсь развернуть ту же WAR на Tomcat 8.
Ответ 12
В моем случае я использовал WinSCP для передачи файла. Я много раз пробовал со всеми предложениями, описанными здесь. Все, что я сделал, чтобы заставить его работать, это перезапустить WinSCP, и tomcat может прочитать файл.
Ответ 13
Спасибо @BalusC. Имел такой же вопрос. Пробовал много вариантов. Думал, что это из-за lib, который я добавил в maven без рамки прототипа, и в результате он также попал в военный файл, исправил и тот же результат. Я могу открыть его как почтовый индекс, и все "выглядит" там хорошо.
Пробовал локально (другая версия tomcat: 7.0.67 по сравнению с 7.0.22 У меня проблема) работает хорошо. Затем попытался с 7.0.22, но на другой VM (экземпляр) - работает хорошо. Я подозреваю, что есть что-то с tomcat или, возможно, конфликтуют с другими файлами (это только разница с другой VM, все включая Java одинаковы).
Проблема разрешена для меня с использованием другого экземпляра tomcat.
Ответ 14
Показана причина:
java.lang.IllegalArgumentException: Invalid or unreadable WAR file : error in opening zip file
Файл A WAR
(Web ARchive) - это zip файл, содержащий ваши классы, библиотеки и ресурсы для вашего веб-приложения.
Переименуйте свой WAR файл с a.war
на a.zip
. Если вы не можете открыть zip файл с помощью Winzip/7-Zip/WinRar, снова создайте файл WAR.
Надеюсь, что это поможет.