Tomcat WARファイルデプロイ
作成日:
java tomcat deploy troubleshooting
概要
WARファイル(Web Application Archive)は、JavaのWebアプリケーションをパッケージ化したファイル形式。Apache Tomcatでは、WARファイルをwebappsディレクトリに配置するか、管理コンソールからアップロードすることでデプロイできる。
デプロイ方法
方法1: webappsディレクトリに配置
# WARファイルをwebappsに配置
cp myapp.war $CATALINA_HOME/webapps/
# Tomcatが自動的に展開(autoDeploy="true"の場合)
方法2: Tomcat Manager(管理コンソール)
http://localhost:8080/manager/htmlにアクセス- 「WARファイルをデプロイ」セクションでファイルを選択
- 「デプロイ」ボタンをクリック
トラブルシューティング
起動失敗時の確認手順
- ログを確認する(最重要)
# メインログ
tail -100 $CATALINA_HOME/logs/catalina.out
# アプリケーション固有のログ
tail -100 $CATALINA_HOME/logs/localhost.$(date +%Y-%m-%d).log
# リアルタイムで監視
tail -f $CATALINA_HOME/logs/catalina.out
- アプリケーションのステータスを確認
# Manager APIで確認
curl -u admin:password http://localhost:8080/manager/text/list
よくある問題と解決方法
| 問題 | 原因 | 解決方法 |
|---|---|---|
ClassNotFoundException | 依存ライブラリが不足 | WARにライブラリを含めるか、$CATALINA_HOME/lib/に配置 |
UnsupportedClassVersionError | Javaバージョン不一致 | WARのコンパイルバージョンとTomcatのJavaバージョンを確認 |
NoClassDefFoundError | クラスパス設定の問題 | 依存関係を確認、WEB-INF/libを確認 |
OutOfMemoryError | メモリ不足 | CATALINA_OPTSでヒープサイズを増加 |
Address already in use | ポート競合 | 使用中のポートを確認し、変更または停止 |
Permission denied | 権限不足 | webappsディレクトリの権限を確認 |
Javaバージョン不一致の確認
# TomcatのJavaバージョンを確認
$CATALINA_HOME/bin/catalina.sh version
# または
java -version
# WARファイルのコンパイルバージョンを確認(クラスファイルから)
unzip -p myapp.war WEB-INF/classes/com/example/MyClass.class | file -
Javaバージョンとクラスファイルのバージョン対応表:
| クラスバージョン | Javaバージョン |
|---|---|
| 52.0 | Java 8 |
| 55.0 | Java 11 |
| 61.0 | Java 17 |
| 65.0 | Java 21 |
メモリ設定の調整
# setenv.sh を作成($CATALINA_HOME/bin/)
export CATALINA_OPTS="-Xms512m -Xmx2048m -XX:MaxMetaspaceSize=256m"
web.xml の検証
WARファイル内のWEB-INF/web.xmlに構文エラーがあるとデプロイに失敗する。
# WARから web.xml を抽出して確認
unzip -p myapp.war WEB-INF/web.xml | head -50
# XMLの構文検証
xmllint --noout WEB-INF/web.xml
コンテキストパスの競合
同じコンテキストパスを持つアプリケーションが既に存在する場合、デプロイに失敗する。
# 既存のアプリケーションを確認
ls -la $CATALINA_HOME/webapps/
# 同名のディレクトリやWARがあれば削除または名前変更
クリーンデプロイ
問題が解決しない場合、クリーンデプロイを試す。
# Tomcatを停止
$CATALINA_HOME/bin/shutdown.sh
# 古いデプロイを削除
rm -rf $CATALINA_HOME/webapps/myapp
rm -f $CATALINA_HOME/webapps/myapp.war
# workディレクトリをクリア(キャッシュされたコンパイル済みJSPなど)
rm -rf $CATALINA_HOME/work/Catalina/localhost/myapp
# WARを再配置
cp myapp.war $CATALINA_HOME/webapps/
# Tomcatを起動
$CATALINA_HOME/bin/startup.sh
Tomcat Manager の設定
Managerアプリを使用するには、tomcat-users.xmlでユーザーを設定する必要がある。
<!-- $CATALINA_HOME/conf/tomcat-users.xml -->
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<user username="admin" password="password"
roles="manager-gui,manager-script"/>
</tomcat-users>
関連項目
- Apache Tomcat - Tomcatの概要
- Catalina - サーブレットコンテナ