Maven 입문 | 그밖에 | 톰캣 구동해서 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>

또는 runtim에 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