web-dev-qa-db-ja.com

java.lang.IllegalArgumentException:無効または読み取り不可能なWARファイル:Zipファイルを開く際のエラー


display.warファイルをTomcatで実行すると、Catalina.2011-03-30.logでこのエラーが発生しました。エラーを以下に示します。

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)  

前もって感謝します。

15
insomiac

残念ながら、原因と解決策はそれ明らかではありません Buhake Sindiが示唆しているように 。私は以前にいくつかのフォーラムでこの問題を何度か見ました。少なくとも一度は自分で体験したことがあります。 Googleは現在、 exact 例外メッセージで500を超えるヒットを出します。すべてが未回答のままです。ただし、IDE Xで機能するが、IDE Yでは機能せず、サーバーXでは機能するがサーバーYでは機能しないというヒントがあります。 WARから/へのsomethingの削除または追加は機能します(典型的な例は ここ にあります)。ただし、誰も説明していません。真の根本原因の詳細。

は、使用されているJDK/JREバージョンとWARのファイルサイズの組み合わせに関係があると思います。試すことができるいくつかのことがあります:

  • IDEおよび/またはappserver環境でJDK/JREバージョンを更新/調整してみてください。
  • WAR、ランダムなJARまたはJSPファイルなどに何かを追加してから、再構築してみてください。
17
BalusC

ランダムにエラーが発生しました。原因は非常に単純だと思います。

これは、WARファイルを作成し、それを「遅い」プロセスによってTomcatディレクトリに転送するときに発生する可能性があります。私の場合、それはscpによるリモートマシンからの転送です。 Tomcatは、転送が終了する前にファイルが変更されたこと(変更日など)を認識できます。次に、不完全なファイルを展開しようとする場合があります。 Zipエラーが発生します。

理論的には、ファイルを別のディレクトリからコピーした場合にも同じことが起こります。コピーが速いので、チャンスは小さいですが。

エラーを完全に回避するには、ファイルを同じディスク上の別の場所から移動する(コピーしない)必要があります。そのような動きは(私が思うに)原子的です。

私が開発している間、エラーが時々発生することは大きな問題ではありません。それに遭遇したとき、私はただ転送を再開します。

8
user3227845

Linuxにデプロイする場合は、Tomcatプロセスが実行されていることをユーザーが読み取れることを確認してください。 warファイルに対して「chmod + r」を実行して、すべてのユーザーに読み取り権限を追加します。

5
Mike Pone

私はこの問題に直面しました。ビルドに何も追加も変更もしませんでした。しかし、warファイルをリモートのTomcat7/webapps/ディレクトリに直接アップロードしていたため、問題が発生したと思います。

Warファイルを/home/yourusernameなどの中間ディレクトリに解決してから、webappsディレクトリに移動します。おそらく私にとって、この問題はファイルがまだ完全にアップロードされておらず、Tomcatがファイルを抽出/デプロイしようとしたために発生しました。

これが誰かを助けることを願っています。

ここでも同じ問題があります。 warファイルは7-Zipで開くことができます。

編集:理由がわかりました。 「無効または読み取り不可能なWARファイル:Zipファイルを開く際のエラー」は間違いなく紛らわしいエラーメッセージです。本当の理由は、単に「初期化エラーがあるため、Tomcatが戦争を展開できない」ということです。私の場合、Warファイルにいくつかの構成ファイルがないため、ファイルが見つからないという例外がスローされます。 Tomcatのバージョンが異なれば、異なるエラーが報告されるようです。 6.0.26では、エラーが正しく報告されます。しかし、6.0.32では、紛らわしい「無効または読み取り不可能なWARファイル」が報告されます。

3
Georgie Porgie

私は何度も同じ問題に直面し、最終的に解決策を見つけました..とにかく正確な解決策をテストにローカルでTomcat 8.0.9を使用していて、サーバーにwarファイルをアップロードすると、warを解凍するとエラーメッセージが表示されました..サーバーTomcatとそれは6だったので、そのバージョンをインストールし、サーバーにJavaのバージョンを確認し、5を見つけたので、ローカルマシンでバージョン5を使用していることも確認しました。問題同じバージョンとTomcatを使用すると、サーバーが理解できるように正しい方法でパックされます...別の解決策..ローカルで使用するものと一致するようにサーバーのバージョンを更新します。それらは同じである必要があります。これで問題が解決することを願っています。

1
Krack

私の場合、ファイル転送中にファイルが破損したためにこの問題が発生しました。したがって、ファイルをリモートサーバーに転送するときは常に、ファイルのチェックサムを検証することが常にベストプラクティスです。

0
Prakash

Abyの特定の問題は解決されたようですが、他の誰かが私と同じ問題でこのページに遭遇した場合に備えて...

/ opt/solrディレクトリに正しい権限が設定されていることを確認してください。後でTomcatのインストールに移行する前に、 SolrJetty チュートリアルに従っていました。私のsolrユーザーはこのコマンドで作成されたため:

useradd -d /opt/solr -s /sbin/false solr

/ opt/solrディレクトリはパーミッション700で作成されたため、TomcatはWARファイルにアクセスできませんでした。 755に変更すると、完全に機能しました。

0
Jody

私の場合、WinSCPを使用してファイルを転送していました。ここで説明するすべての提案を何度も試しました。それを機能させるために私がしたことは、WinSCPを再起動することだけで、Tomcatはファイルを読み取ることができました。

0
daniel sp

私の場合、サイズが数KBであるため、warファイルがリポジトリから正しくダウンロードされません。修正後、ダウンロード構文が正しく開始されました

0
Radhakrishnan

BalusCは正しいです。通常のJDKの代わりにopenjdkバージョンのJavaがインストールされているLinuxボックスでWebアプリケーションを実行したときに、このエラーが発生しました。通常のJDKをインストールし、TomcatのJRE_HOME変数を通常のJDKにポイントした後問題は消えました。

0
Julius

WARファイルへのパスが正しいことを確認してください。タイプミスがありましたが、同じエラーが発生しました。

0
RoryBellows

@BalusCありがとうございます。同じ問題がありました。多くのオプションを試しました。これは、プロトタイプスコープなしでmavenに追加したlibのせいであると考えられ、その結果、warファイルにも移動し、修正され、同じ結果になりました。 Zipとして開くことができ、すべての「見た目」が良好です。

ローカルで試してみました(異なるTomcatバージョン:7.0.67と7.0.22で問題があります)は正常に機能します。次に7.0.22で試してみましたが、異なるVM(インスタンス)-正常に動作します。Tomcatに何かがあるか、他のファイルと競合している可能性があります(これは、他のVMとの違いのみです。すべてJavaは同じ)を含みます。

この問題は、別のTomcatインスタンスを使用して解決されました。

0
Denys

同じ問題が発生しました(Java.lang.IllegalArgumentException: Invalid or unreadable WAR file)。私の場合、原因はWARファイルにcatalina-6.0.43.jarが含まれていたことでした。エラーを取り除くために、このjarを含まない新しいWARファイルを作成しました。その後、Tomcat7はアプリケーションを正常に起動できました。残念ながら、このソリューションはTomcat 7でのみ機能しました。まったく同じWARをTomcat8にデプロイしようとすると、同じエラーが発生します。

0
iosparkletree