Maven 入門 | その他 | Tomcat を起動して app を deploy する

Maven プロジェクトの Tomcat を Apache Tomcat Maven Plugin で起動する方法について説明する。

Goals

Goal 説明
tomcat7:deploy Deploy a WAR to Tomcat.
tomcat7:run Runs the current project as a dynamic web application using an embedded Tomcat server.
tomcat7:help Display help information on tomcat7-maven-plugin. Call mvn tomcat7:help -Ddetail=true -Dgoal=<goal-name> to display parameter details.

設定

明示的な設定を指定しない場合、tomcat7 は次の設定を既定値として起動する。

  • Tomcat manager URL of http://localhost:8080/manager
  • Authentication details of username admin and no password
  • Context path of /${project.artifactId}
<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
      </plugin>
      ...
    </plugins>
  </build>
  ...
</project>

finalName で artifact のファイル名を変更した場合は、次のように configuration の path を変更する必要がある。

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
          <path>/${project.build.finalName}</path>
    </configuration>
</plugin>

使用方法

次の goal を実行すると、現在のプロジェクトを組み込み Tomcat で deploy できる。

$ mvn tomcat7:run

context url

context URL は artifactId と同じである。たとえば testApp であれば http://localhost:8080/testApp にアクセスして deploy された内容を確認できる。finalName で artifact を変更した場合、たとえば webApp.war にした場合は、http://localhost:8080/webApp のように finalName と同じ context でアクセスする。context を / にマッピングする場合は、下記の configuration を参照する。

Configuration

Tomcat が使用する HTTP port や AJPPort を変更できる。

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <path>/</path> <!-- default artifactId -->
        <port>18080</port> <!-- default 8080 -->
        <ajpPort>18009</ajpPort> <!-- default 8009 -->
        <httpsPort>18443</httpsPort> <!-- default 8443 -->
        <contextReloadable>true</contextReloadable>
        <keystoreFile>${user.home}/.keystore</keystoreFile>
        <keystorePass>changeit</keystorePass>
    </configuration>
</plugin>

また、runtime に maven.tomcat.xxxx 形式の property で設定することもできる。設定可能な property は http://mojo.codehaus.org/tomcat-maven-plugin/run-war-only-mojo.html を参照する。

property 既定値 備考
port 8080
ajpPort 8009
httpsPort 8443
contextReloadable true
keystoreFile なし HTTPS 用証明書があるキーストア
keystorePass なし HTTPS 用秘密鍵があるキーストア
path artifactId Context path

上記の設定を runtime に property として渡す。

$ mvn tomcat7:run -Dmaven.tomcat.port=18080 -Dmaven.tomcat.ajp.port=18009 -Dmaven.tomcat.httpsPort=18443 -Dmaven.tomcat.contextReloadable=true -Dmaven.tomcat.path="/"

必須ライブラリの読み込み

JDBC や JCE Provider など、TOMCAT_HOME/lib に入れる必要がある library を自動で読み込むには、次のように <plugin> element に <dependency> を記述する。 (http://stackoverflow.com/questions/9928829/tomcat7-maven-plugin-extradependency-seems-not-being-loaded)

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <!-- tomcat の lib フォルダに入れる必要がある library を記述する -->
    <dependencies>
      <dependency>
       <groupId>postgresql</groupId>
       <artifactId>postgresql</artifactId>
       <version>8.4-701.jdbc4</version>
      </dependency>
    </dependencies>
</plugin>

参照

https://www.lesstif.com/pages/viewpage.action?pageId=14090451