こんにちは、わたあめです。プログラムを修正して、warファイルをエクスポート、そしてデプロイ(tomcatに配置)と、いつもの流れで修正・更新作業を行いましたが…。
warファイルを更新したはずなのに、修正内容が反映されずに前バージョンで動いているという事に気が付きました。この記事では、warファイルが古いまま動いている場合に、わたあめが対処したかをまとめています。
それでは、いってみましょう!
事象
今回、Eclipseでプログラムおよび関連ファイルを修正、その後warファイルをエクスポートし、デプロイ(tomcatの所定の位置に配置)しました。ですが、想定と違って以下の動きになりました。
- 更新したにも関わらず、修正内容が反映されない。修正前のロジックで動いている模様。
- server.xmlのunpackWARsの設定値はtrueとなっており、warが自動展開される設定となっている。
- 同じ手順で今までは問題なく更新できていた。
原因
warファイルは新しいものに入れ替わっているが、warファイルの展開先フォルダが古いまま、ということが原因でした。通常、unpackWARsの設定がtrueであれば、warファイルを配置後、tomcatの方で自動で展開されます。何がきっかけで、自動展開されなくなったかは突き止められておりませんが、詳しく原因をみていきましょう。
warファイルの動きをおさらい
warファイルとは、拡張子が”.war"になったファイルで、実態はzipファイルです。
設定にもよりますが、通常はwarファイルを所定の位置にデプロイ(設置)することで、tomcatがwarファイルを自動展開してくれます。warファイルの設置場所は、tomcatフォルダのwebappsというフォルダに配置していることが多いです。※環境によってtomcatフォルダは異なります。
tomcatは展開したファイルを読んでプログラムを動かすという訳です。
warファイル展開後の更新日時を確認する
もし、同じような挙動になっている方がいたら、展開したファイルが古いままかどうかを確認してみましょう。
tomcatによりwarファイルの展開が行われると、フォルダが作成されます。例えば、test_program.warというwarファイルを配置すると、test_programというフォルダが作成され、その中にファイルが展開されています。
展開されて作成されたフォルダの中を確認してみます。作成したプログラムによってフォルダ構成は違いますが、画像の赤枠のようにフォルダやファイルの更新日時を確認します。
ここの日付がwarファイルよりも古ければ、古いバージョンのまま動いている可能性が高いです。
対処法
tomcatを停止後、展開後のフォルダを削除し、tomcatを起動します。詳しい手順は以下です。
手順
- tomcatフォルダ>[bin]>[shutdown.bat]をダブルクリック
- tomcatフォルダ>[webapps]>war展開後のフォルダをフォルダごと削除
- tomcatフォルダ>[bin]>[startup.bat]をダブルクリック
start.bat実行後、自動的に新しいフォルダが作成されます。新しく作成されたフォルダの更新日時は新しくなっているはずです。
その他対処法
今回、怖かったので手作業でフォルダ削除する方向にしましたが、tomcatフォルダ>[conf]>server.xmlファイルを以下の通り設定する方法もあるみたいです。
- confunpackWARs="false"に設定する:展開せずにwarファイルを直接使う
通常は展開したファイルを利用すると思うので、今回はここの設定変更は採用しませんでした。気になる場合は、別途調べてみてくださいね!
さいごに
最後までお読みいただきありがとうございました。この記事が同じ事象で悩んでいる方の解決の糸口になれば幸いです。
それでは、また!