Help us understand the problem. What is going on with this article?

MavenプロジェクトをTomcatで動かす方法

More than 5 years have passed since last update.

経緯

「Webアプリ用のMavenプロジェクトをTomcatで動かしたいです!」と方法を聞かれたので、私が知っている方法をまとめておく。開発の上でのルールに合わせて、いずれか一つの方法でよい。

方法1 Apache Tomcat Maven Plugin を使う

設定

プロジェクトのpom.xmlのpluginsの部分にApache Tomcat Maven Pluginを追加。

pom.xml
<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要素を追加する。

pom.xml
<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を変更する。

~/.m2/settings.xml
<settings>
  <!-- snip -->
  <servers>
    <server>
      <id>tomcat-localhost</id>
      <username>foo</username>
      <password>bar</password>
    </server>
  </servers>
</settings>

必ず、 settings.xmlの<id>要素とpom.xmlの<server>要素の値を一致させておく こと。

$CATALINA_HOME/conf/tomcat-user.xml
<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
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>要素を足しておく。

pom.xml
<build>
  <finalName>foo</finalName>
 <!-- snip -->
</build>

こうすると、ビルド済みのフォルダ(およびwarファイル名)が固定される。

方法4 Eclipseの場合

Eclipseの場合は、EclipseのWTPサーバにTomcatを追加して実行する方法と、往年のSysdeo Eclipse Tomcat Launcher plugin を利用する方法2がある。

後者は方法3とほとんど変わらない1ので、前者の方法。(誰かから要望があれば書くかも)

設定

  1. EclipseのServersウィンドウを開く
    (Window -> Show View -> Other... -> Server -> Servers)
  2. まだTomcatサーバを追加したことがなければ追加する
    (右クリック -> New -> Server)
  3. New Serverダイアログが表示されるので、Apacheフォルダから動作させたいTomcatのバージョンを選択して'Next'ボタンを押す
  4. 'Tomcat installation directory'でTomcatがインストールされたファイルパスを指定する。'JRE'も必要があれば設定し、'Next'ボタンを押す
  5. 動作させるMavenプロジェクトを'Add'して'Finish'ボタンを押す
  6. ServersウィンドウにTomcatサーバが追加されていることを確認する。動作させるアプリケーションの切り替えは、Tomcatサーバを右クリックして、Add and Remote...を選択すればよい

実行

ServersウィンドウのTomcatサーバを右クリックし、DebugもしくはStartをクリックする。Serversウィンドウ右上のアイコンをクリックしても同様。

備考

コンテキストルートなどは原則pom.xmlに従って設定されているが、確認したいときはプロジェクトのプロパティから確認できる。

参考

no more sysdeo tomcat launcher on eclipse juno


  1. EclipseのSysdeo Eclipse Tomcat Launcher pluginを使ってる場合は、「アプリケーションルートとするサブディレクトリー」の値に/target/foo-0.1-SNAPSHOTと入力してもよい
  2. 執筆時点でTomcat7まで対応。Tomcat8でもTomcat7として設定しておけば動くよ!的な記事も見かける。
gishi_yama
Java User Group Hokkaido #JavaDo Leader, IoTLT Sapporo Staff. R&D: Computers in Education, ICT, Programmer Education. Love:#Java #MobProgramming #codeSpark #ApacheWicket #PostgreSQL
https://sites.google.com/site/cistyamakawa/
iotlt
IoT縛りの勉強会です。 毎月イベントを実施しているので是非遊びに来てください! 登壇者を中心にQiitaでも情報発信していきます。 https://iotlt.connpass.com
https://iotlt.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした