その他

Tomcat 10とGitBucketを連動させると404エラーになる件について[No98]

スポンサーリンク

GitBucketを"Apache Tomcat"(Tomcat)でサービス起動させて利用するため、インストール作業を進めていましたが、「http://localhost:8080/gitbucket/」にはアクセスできない問題にぶち当たりました。

具体的には「http://localhost:8080/」にはアクセスできるけど、「http://localhost:8080/gitbucket/」にアクセスすると「HTTPステータス 404 – 見つかりません。」と表示されGitBucketが起動しない問題です。

この調査を家で10時間程度行い、原因が分かってきましたので、紹介したいと思います。

行ったこと

以下のことを行いました。

  1. "Tomcat 10"のダウンロードのページ(https://tomcat.apache.org/download-10.cgi)で「10.0.21」>「Binary Distributions」>「Core」>「32-bit/64-bit Windows Service Installer」をダウンロードし、"Tomcat 10"のインストールを行う。※インストールで選択するものはデフォルトのものです。インストール完了時の画面は「Run Apache Tomcat」「Show Readme」のチェックはOFFにしました。
  2. 「サービス」アプリを起動し「Apache Tomcat 10.0 Tomcat10」を実行する。
  3. Google Chromeで「http://localhost:8080/」を開き、正常にTomcatのメニュー画面が表示されることを確認する。
  4. Tomcatのメニュー画面の「右側」の「Manager App」ボタンをクリックし、「Tomcat Webアプリケーションマネージャ」画面を開く。
  5. 「C:\Program Files\Apache Software Foundation\Tomcat 10.0\webapps」に「gitbucket.war」を配置(デプロイ)し同階層に「gitbucket」フォルダが作成されることを確認する。
  6. 「サービス」アプリを起動し「Apache Tomcat 10.0 Tomcat10」のサービスを再起動する。
  7. 「Tomcat Webアプリケーションマネージャ」画面で「アプリケーション」セクションの「/gitbucket」の「実行中」列が「true」か「false」のどちらかを確認する。もしも、「Tomcat Webアプリケーションマネージャ」画面の「アプリケーション」セクションの「実行中」列が「fa;se」で、「コマンド」列の「起動」ボタンを押せる場合は押す。「起動」ボタンを押すと、同画面の「メッセージ」にメッセージが表示される。

ここまで行うと下図の左側のようになりました。(=左側は「Tomcat 10(10.0.21)」のものです。)表示された文字列は「HTTPステータス 404 – 見つかりません。」「タイプ:ステータスレポート」「メッセージ:要求されたリソース [/gitbucket/] は利用できません。」「説明:オリジンサーバーは、ターゲットリソースの現在の表現を見つけられなかったか、またはそれが存在することを開示するつもりはありません。」です。

下図の右側は「Tomcat 9(9.0.63)」を同様の手順で行ったものです。

また上記の手順に記載しました「Tomcat Webアプリケーションマネージャ」画面の画像は以下です。左側の「Tomcat 10(10.0.21)」の場合は「起動」ボタンを押した後、「メッセージ」欄に「FAIL - コンテキストパス [/gitbucket] のアプリケーションが起動できません」と表示されます。こちらも右側は「Tomcat 9(9.0.63)」のものです。

調査結果

比較ソフト「WinMerge」で次のフォルダを比較し下図の結果となりました。

  • 「C:\Program Files\Apache Software Foundation\Tomcat 9.0」
  • 「C:\Program Files\Apache Software Foundation\Tomcat 10.0」

「logs」フォルダ内のファイルで「Caused by: java.」と含まれる箇所をGrep検索すると次のようになりました。


Tomcat 10.0\logs\localhost.2022-05-29.log(42,2)  [UTF-8]: 	Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpSessionListener
Tomcat 10.0\logs\localhost.2022-05-29.log(87,2)  [UTF-8]: 	Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContextListener
Tomcat 10.0\logs\localhost.2022-05-29.log(132,2)  [UTF-8]: 	Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContextListener
Tomcat 10.0\logs\localhost.2022-05-29.log(177,2)  [UTF-8]: 	Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContextListener
Tomcat 10.0\logs\localhost.2022-05-29.log(232,2)  [UTF-8]: 	Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpSessionListener
Tomcat 10.0\logs\localhost.2022-05-29.log(286,2)  [UTF-8]: 	Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContextListener
Tomcat 10.0\logs\localhost.2022-05-29.log(340,2)  [UTF-8]: 	Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContextListener
Tomcat 10.0\logs\localhost.2022-05-29.log(394,2)  [UTF-8]: 	Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContextListener

気になった箇所は「\Tomcat 10.0\work\Catalina\localhost\ROOT\org\apache\jsp\index_jsp.java」の違いです。

「Tomcat 9→javax.servlet」、「Tomcat 10→jakarta.servlet」のようにインポートしています。

恐らく、下図のように「gitbucket」のフォルダ内を見ていると思います。

「gitbucket」フォルダには「javax」フォルダはありますが、「jakarta」フォルダはないため、「java.lang.ClassNotFoundException」を出力し、404エラーになっていると思います。

裏付けるもの

「https://github.com/gitbucket/gitbucket」では「Installation」のところに「Note that GitBucket doesn't support Jakarta EE yet.」(GitBucketはまだJakartaEEをサポートしていないことに注意してください。)と記載があります。

「https://tomcat.apache.org/index.html」では「Tomcat 10」以降のものは「Jakarta EE」に対応していると記載があります。

「Jakarta EE」をインストールできれば、改善されるか検証も出来たのですが、本日は出来ませんでした。

参考サイト/関連サイト

https://tomcat.apache.org/index.html

https://github.com/gitbucket/gitbucket/blob/master/README.md

最後までお付き合いいただきありがとうございます!

この情報が誰かの役にたてれば幸いです。

スポンサーリンク

-その他