tomcat7-maven-plugin - 메이븐에서 톰캣 구동해서 app deploy 하기

개요

maven 에서 tomcat 을 구동할 수 있는 플러그인.


Goals

GoalDescription
tomcat7:deployDeploy a WAR to Tomcat.
tomcat7:runRuns the current project as a dynamic web application using an embedded Tomcat server.
tomcat7:helpDisplay 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>

또는 runtim에 maven.tomcat.xxxx 와 같은 형식의 property 로 설정 가능하다. 설정 가능한 property 는 http://mojo.codehaus.org/tomcat-maven-plugin/run-war-only-mojo.html 를 참고

property기본 값비고
port8080

ajpPort

8009
httpsPort8443

contextReloadable

true

keystoreFile

없음https 용 인증서가 있는 키스토어
keystorePass없음https 용 개인키가 있는 키스토어
pathartifactIdContext 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>


See Also

Ref