【Tomcat】warファイルが読めなくてアプリがデプロイできない
ここしばらく悩んでた事象が解決したのでメモ。
【現象】
------------------------------
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】 と表示。Eclipseのjavaコンパイラー【1.7】になっていたので【1.6】に変更。 → 成功!
【原因?】
- 別の開発をしているときにコンパイラのバージョンをあげてしまってたのかな?
- 同じと思われる現象を扱ったリンク。
※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