私のプロジェクトJ4hrの一環として、アプリケーションのビルドのために Maven (v2) ツールを設定しました。アプリケーションサーバーとしては、Tomcat サーバーの最新バージョン、すなわちバージョン 7 を使用しています。
デプロイを容易にするため、ビルドとデプロイ中に両ツールを統合できる以下の Maven プラグインを作成しました。
このプラグインを使用して両ツールを統合する際に、いくつかの問題に直面しました。Maven は「設定より規約 (convention over configuration)」を推奨しています。これは、あらかじめ固定され、その結果、限定的で、しばしば重くなりがちな設定の側面を、デフォルトの規約として採用するという意味です。この格言は Maven 2 と Tomcat 7 の間では当てはまりませんでした。
技術的な背景は次の通りです。
Maven 2 Tomcat 7 (USER_HOME ディレクトリに tar.gz ファイルからインストール) OpenJDK 1.6.0_18 Ubuntu 4.10
何が起こったのか? pom.xml に、以下に説明するこの新しいアーティファクトの宣言を追加しました。
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat6-maven-plugin</artifactId> <version>2.2</version> </plugin>
コマンドを実行します
mvn tomcat:deploy
そして、コンソールでの結果は以下の通りです。
[INFO] Deploying war to https://:8080/j4hr [INFO] [ERROR] BUILD ERROR [INFO] [INFO] Can not invoke Tomcat manager
Maven は、war をデプロイできる Tomcat マネージャーにアクセスできないと言っています。
プラグインのドキュメントを読むと、使用されるデフォルトの URL は以下の通りであると記載されています。
https://:8080/manager
お気に入りのブラウザ(Chrome と Firefox で迷いますが)でこの URL を入力すると、サーバーから以下の応答がありました。
アクセスしようとしたページ (/manager/) は存在しません。
マネージャーアプリケーションは Tomcat 7 以降向けに「再構築」されており、URL の一部が変更されました。アプリケーションマネージャーにアクセスするために使用されるすべての URL は、以下のいずれかのオプションで始まる必要があります。
なお、テキストインターフェースの URL は「/manager」から「/manager/text」に変更されています。
アプリケーションにアクセスするために使用している URL を調整する必要があるでしょう。ただし、アプリケーションでバグを発見した可能性も常にあります。「もしバグを発見したと確信しており、それがまだ報告されていないのであれば、Apache Tomcat チームに報告してください。
これは興味深いですね!大まかに言えば、Tomcat は、デプロイ用にサーバーを管理するために使用されていた標準の URL が変更されたと教えています。したがって、私たちは確立された規約を超えて、この新しい URL でプラグインを設定する必要があります。pom.xml に追加すべき内容は以下の通りです。
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat6-maven-plugin</artifactId> <version>2.2</version> <configuration> <url>https://:8080/manager/html</url> </configuration> </plugin>
通常、この情報があればすべて正常に戻るはずですが、一つだけ例外があります。もし管理サーバーアカウントが、新しい問題が発生したときに使用されるデフォルト値で設定されていない場合です。この問題を解決するには、Maven の settings.xml ファイル内でサーバーの情報識別子を設定し、pom.xml からこのサーバー名を参照する必要があります。
この問題に遭遇した際に、お役に立てれば幸いです。