MavenプロジェクトをリモートサーバのTomcatにデプロイ

maven-tomcat7-pluginを使うと、コマンド一発でmavenプロジェクトをwarにパッケージ→tomcatが動作しているサーバへデプロイすることができます。デプロイ成功までちょっとにハマるところがあったのでメモしておきます。

環境セットアップ

リモートデプロイにはTomcat本体とは別にTomcat Managerというソフトウェアをインストールする必要があります。このソフトはWebの管理画面からwarパッケージをアップロードしたりできる便利ツールで、maven pluginからデプロイする際にも必須です。自分のUbuntu環境では以下のようにaptでインストールしました。

% apt-get install tomcat7 tomcat-admin

設定ファイルの記述

インストールが終わったらManagerを利用するための権限設定です。/etc/tomcat7/tomcat-users.xmlに以下の内容を加えます。

<user username="admin" password="admin" roles="manager-script,manager-gui" />

ここでtomcat managerのユーザ名・パスワードを設定します。rolesではアクセス権限を設定することができ、リモートデプロイに必要なmanager-scriptを書いておきます。manager-guiはブラウザからtomcat managerにアクセスするための権限なので、ここでは必須ではないです。

これでtomcat側の設定はおしまいです。次に、Mavenプロジェクトのpom.xmlを以下のように編集します。

<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.0-beta-1</version>
  <configuration>
    <url>http://localhost:8080/manager/text</url>
    <server>tomcat-manager</server>
    <path>/weblogger</path>
 </configuration>
</plugin>


タグにはデプロイ先URLを指定します。インターネット上で調べていたらデプロイ先のパスには/managerのみ使うといった記述が多数あったのですが、/manager/textでないとデプロイに失敗します。最新バージョンでは仕様変更があったのかな・・?

最後に~/.m2/settings.xmlを編集します。

  <servers>
    <server>
      <id>tomcat-manager</id>
      <username>admin</username>
      <password>admin</password>
    </server>
  </servers>

これで設定は終了です。デプロイしたいmavenプロジェクトで

% mvn tomcat7:deploy

とするとデプロイが始まります。

注意点

tomcat-users.xmlに適切なpermissionが追加されていない場合、デプロイには失敗してもmvnのビルド自体は成功メッセージが出るのでコンソールログをよく見ておく必要があります。

また、pom.xmlのurlタグに指定するサーバのcontext pathは古いバージョンでは異なっているらしく、ネットで調べると/managerが正しいとかいう情報を多く見かけました。tomcat7 pluginを使っている場合は、正しくはApache Tomcat Maven Plugin - About Apache Tomcat Maven Pluginの下の方にこっそり書かれている通り/manager/text を指定します。