経緯
「Webアプリ用のMavenプロジェクトをTomcatで動かしたいです!」と方法を聞かれたので、私が知っている方法をまとめておく。開発の上でのルールに合わせて、いずれか一つの方法でよい。
方法1 Apache Tomcat Maven Plugin を使う
設定
プロジェクトのpom.xmlのpluginsの部分にApache Tomcat Maven Pluginを追加。
<plugins>
<!-- snip -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/foo</path>
</configuration>
</plugin>
</plugins>
実行
mvnでTomcatを実行。
$ mvn tomcat7:run
http://localhost:8080/foo/ にブラウザでアクセスして、Webアプリが動作していることを確認。
なお、server.xmlを読ませたいときは、configuretion要素の中にserverXml要素を作成すれば良いようだ。
方法2 既存のTomcatとApache Tomcat Maven Pluginを連係させる
方法1ではMavenがダウンロードしたTomcatを動作させているが、いろいろな理由で、すでにインストール済みのTomcatを使いたい場合があるだろう。このような場合には、Apache Tomcat Maven Pluginを用いて既存のTomcatのmanagerを通じてプロジェクトをdeployさせる。
設定
以後は、すでにインストール済みのTomcatがlocalhost:8080で動作していることを前提とする。
まず、方法1のpom.xmlのconfiguration要素の中に、さらにserver要素、url要素を追加する。
<plugins>
<!-- snip -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/foo</path>
<server>tomcat-localhost</server>
<url>http://localhost:8080/manager/text</url>
</configuration>
</plugin>
</plugins>
次に、managerをmvnから操作できるように、mavenのsettings.xmlとtomcatのtomcat-user.xmlを変更する。
<settings>
<!-- snip -->
<servers>
<server>
<id>tomcat-localhost</id>
<username>foo</username>
<password>bar</password>
</server>
</servers>
</settings>
必ず、 settings.xmlの<id>要素とpom.xmlの<server>要素の値を一致させておく こと。
<tomcat-users>
<!-- snip -->
<user username="foo" password="bar" roles="manager-script"/>
</tomcat-users>
すでにmanager-guiなどを使っている場合は、roles属性の値をカンマで区切って複数設定できる。
実行
Tomcatが起動している状態で、以下のコマンドを実行する。
$ mvn package tomcat7:deploy
http://localhost:8080/foo/ にブラウザでアクセスして、Webアプリが動作していることを確認。
なお、deployのし直しは tomcat7:redeploy
、deployの停止は tomcat7:undeploy
などで実行できる。
方法3 既存のTomcatのコンテキストファイルでビルド済みのフォルダを指定する
諸事情でApache Tomcat Maven Pluginを使えない/使わないときは、Tomcatのコンテキストファイルからprojectのtargetのビルド済みのフォルダを指定する。
他に比べてスマートじゃないけど、こういう環境もあるだろうということで。
設定
以後はプロジェクトのディレクトリが /Users/hoge/workspace/foo だと仮定する。
また、mvn package
した結果、ビルド済みのフォルダがプロジェクト内の target/foo-0.1-SNAPSHOT に作成されたと仮定する。
$CATALINA_HOME/conf/Catalina/localhost/ に、コンテキストファイルfoo.xmlを作成する1。
$ vi CATALINA_HOME/conf/Catalina/localhost/foo.xml
<Context path="/foo" docBase="Users/hoge/workspace/foo/target/foo-0.1-SNAPSHOT" />
実行
Tomcatを実行した上で、http://localhost:8080/foo/ にブラウザでアクセスしてWebアプリが動作していることを確認する。
備考
バージョン番号の変更などにあわせてビルド済みのフォルダが代わる(コンテキストファイルを編集する)のが嫌な場合は、pom.xmlの<build>要素に<filename>要素を足しておく。
<build>
<finalName>foo</finalName>
<!-- snip -->
</build>
こうすると、ビルド済みのフォルダ(およびwarファイル名)が固定される。
方法4 Eclipseの場合
Eclipseの場合は、EclipseのWTPサーバにTomcatを追加して実行する方法と、往年のSysdeo Eclipse Tomcat Launcher plugin を利用する方法2がある。
後者は方法3とほとんど変わらない1ので、前者の方法。(誰かから要望があれば書くかも)
設定
- EclipseのServersウィンドウを開く
(Window -> Show View -> Other... -> Server -> Servers) - まだTomcatサーバを追加したことがなければ追加する
(右クリック -> New -> Server) - New Serverダイアログが表示されるので、Apacheフォルダから動作させたいTomcatのバージョンを選択して'Next'ボタンを押す
- 'Tomcat installation directory'でTomcatがインストールされたファイルパスを指定する。'JRE'も必要があれば設定し、'Next'ボタンを押す
- 動作させるMavenプロジェクトを'Add'して'Finish'ボタンを押す
- ServersウィンドウにTomcatサーバが追加されていることを確認する。動作させるアプリケーションの切り替えは、Tomcatサーバを右クリックして、Add and Remote...を選択すればよい
実行
ServersウィンドウのTomcatサーバを右クリックし、DebugもしくはStartをクリックする。Serversウィンドウ右上のアイコンをクリックしても同様。
備考
コンテキストルートなどは原則pom.xmlに従って設定されているが、確認したいときはプロジェクトのプロパティから確認できる。
参考
-
EclipseのSysdeo Eclipse Tomcat Launcher pluginを使ってる場合は、「アプリケーションルートとするサブディレクトリー」の値に
/target/foo-0.1-SNAPSHOT
と入力してもよい↩ - 執筆時点でTomcat7まで対応。Tomcat8でもTomcat7として設定しておけば動くよ!的な記事も見かける。↩