【Tomcat】warファイルが読めなくてアプリがデプロイできない

ここしばらく悩んでた事象が解決したのでメモ。

 

【現象】

  • WindowsEclipseで作ったwarをCentOSTomcat上に展開すると以下のようなエラーが出てWebアプリをデプロイできない。

------------------------------
2015/06/04 8:05:09 org.apache.catalina.core.StandardContext resourcesStart
致命的: 静的リソースの起動中のエラーです
java.lang.IllegalArgumentException: 無効又は読めないWARファイルです : error in opening zip file
at org.apache.naming.resources.WARDirContext.setDocBase(WARDirContext.java:138)
at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:4906)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5086)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:968)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1646)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
2015/06/04 8:05:09 org.apache.catalina.core.StandardContext startInternal
致命的: Error in resourceStart()
2015/06/04 8:05:09 org.apache.catalina.core.StandardContext startInternal
致命的: Error getConfigured
2015/06/04 8:05:09 org.apache.catalina.core.StandardContext startInternal
致命的: 以前のエラーのためにコンテキストの起動が失敗しました [/hoge]
2015/06/04 8:05:09 org.apache.catalina.deploy.NamingResources cleanUp
------------------------------

 

【状況】

  • 以前は上手く行っていた。
  • しかしながら以前成功しているソースでwarを作っても上手くいかないので、ソースは問題では無く環境に問題がありそう。
  • 最近新しいバージョンのJavaを入れた。

 

【やったこと】

  • とりあえず何もせずwar作り直し → ダメ
  • warを展開。展開したファイルをzipに圧縮。zipの拡張子をwarに変更。→ ダメ
  • Javaのバージョン戻し。Windowsコマンドプロンプトで「java -version」で出てくるバージョンが1.8になっていたので、環境変数を変更して以前使っていた1.7に戻した。 → ダメ

環境変数設定関係でもつまづいたので参考リンク

java.exe の実行パスに環境変数 PATH の設定が反映されない(Windows) - happynowの日記

  •  サーバーと開発機でjavaのバージョン合わせ。サーバー側で「java -version」【1.6】 と表示。Eclipsejavaコンパイラー【1.7】になっていたので【1.6】に変更。 → 成功!

f:id:ksk428:20160511164444j:plain

 

【原因?】

  • 別の開発をしているときにコンパイラのバージョンをあげてしまってたのかな?
  • 同じと思われる現象を扱ったリンク。

jsp - java.lang.IllegalArgumentException: Invalid or unreadable WAR file : error in opening zip file - Stack Overflow

Google翻訳

残念ながら、原因や解決策はないことは明らかBuhakeシンジが示唆するように。私はいくつかのフォーラムで何回か前に、この問題を見てきました。私も、少なくとも一度それを自分自身を経験しました。Googleは上で現在500を超えるヒットを与え、正確な例外メッセージを。すべてが未回答のままです。しかし、それはIDE Xで動作することをヒントではなく、IDE Yにし、それがサーバーY.のサーバーX上で動作しますが、ないことまたは削除または追加することがあります何かを(典型的な例をWARの作品へ/からすると、見つけることができるここに)。誰もしかし、深さの本当の根本的な原因を説明していません。

私は思う、それが使用JDK / JREのバージョンとWARのファイルサイズの組み合わせとは何かを持っていること。ここでは、試すことができますいくつかのものがあります:

あなたのIDEおよび/またはアプリケーションサーバー環境でJDK / JREのバージョンを揃える/更新してみてください。
WAR、いくつかのランダムなJARファイルまたはJSPファイルまたは何に何かを追加し、再構築してみてください。

 

 

この手の問題は解決してみると「なぜオレはあんなムダな時間を……」とミッチー状態になる。

 

【自分のケースでは解決には結び付かなかったが参照したページ】

Tomcat5.5.27のServletContext « ひよっこ。

TomcatのSEVERE: Error listenerStartについて - QA@IT

java - trouble deploying .WAR to tomcat - Stack Overflow

Tomcatのインストール手順(7.0.50) - 世界の一部