메이븐다운(?) 방법으로 웹어플리케이션을 원격서버로 전송하기 위해서 이것저것 찾아보다가 알게 된 거 정리해본다.
1. deploy:deploy
packaging한 artifacts를 리모트의 메이븐저장소로 전송한다. 원격 저장소는 <distributionManagement>엘리먼트의 <repository>에 설정한다. 임의의 파일을 전송하는 건 불가능하다. package 가 war 이고 저장소 경로가 ftp://repository.mycompany.com/repository 라면, 실제로 war 파일은 저장소 layout에 맞춰서 ~/repository/groupId/artifactId/version 디렉토리에 전송된다.
2. site:deploy
site phase에서 생성된 사이트를 리모트 (웹)서버로 전송한다. 리모트 서버정보는<distributionManagement>엘리먼트의 <site>에 설정한다. inputDirectory 옵션을 통해 target/site 디렉토리가 아닌 다른 디렉토리의 파일들을 전송할 수 있다. 그러나 <site>는 하나만 설정가능하기 때문에 2군데 이상의 서버로 파일들을 전송하는 건 불가능하다.
3. cargo 플러그인
일부 컨테이너에 대해 remote container에 expanded war(war 파일의 압축을 풀어놓은 것. exploded war)를 배포할 수 있다고 cargo 웹사이트에 나온다. 하지만 과연 이게 가능할지는 의구심이 든다. 실제로 작동여부를 테스트해봐야 할 듯하지만, 아마도 war 파일만 원격배포가 가능하지 않을까 싶다. 아직 최신 버전의 상용 WAS에 대한 지원이 미비하다.
4. myfaces의 wagon-maven 플러그인
임의의 디렉토리 내의 파일들을 원격 서버로 전송한다. 임의의 디렉토리를 2군데 이상의 원격서버에 전송할 수 있다. 실제 프로젝트에서 개발서버 배포를 이 플러그인으로 처리했다. target/webapp 디렉토리의 파일들은 WAS서버로 전송하고, target/htdocs 디렉토리의 파일들은 WEB서버로 전송하도록 말이다.
아쉽다면, 지정된 디렉토리 내의 모든 파일들을 전송하며 그 디렉토리의 몇몇 파일들만 골라서 전송할 수는 없다는 것이다. 즉 fileset 개념이 없다(사실 이건 이 플러그인의 문제라기 보다 이 플러그인이 이용하는 메이븐 wagon의 문제이다. 몇몇파일만 골라내는 건 ant copy를 써서 target/htdocs처럼 별도의 디렉토리에 전송할 대상만 따로 모아놓으면 해결할 수 있다).
이 플러그인의 장점이라면 디렉토리를 압축하여 전송후 리모트에서 압축을 해제하는 방식의 wagon 기능을 이용하기 때문에 전송할 파일이 많은 경우에 ant의 ftp/scp 타스크를 이용하는 것보다 전송시간이 현저히 줄어든다는 거.
아래는 실제 pom.xml의 일부인데 별거 아닌게 내용이 긴거 같아 맘이 편하지만은 않다.
<groupId>org.apache.myfaces.buildtools</groupId>
<artifactId>myfaces-wagon-plugin</artifactId>
<version>1.0.0</version>
<executions>
<!-- config 배포 작업 -->
<execution>
<id>deploy-conf</id>
<phase>pre-integration-test</phase>
<goals>
<goal>deploy</goal>
</goals>
<configuration>
<id>deploy-config</id>
<url>
scp://${wasserver.username}:${wasserver.password}@${wasserver.ip}:${wasserver.config.dir}
</url>
<inputDirectory>${config.home.dir}</inputDirectory>
</configuration>
</execution>
<!-- 웹어플리케이션 배포 작업 -->
<execution>
<id>deploy-web</id>
<phase>pre-integration-test</phase>
<goals>
<goal>deploy</goal>
</goals>
<configuration>
<id>deploy-web</id>
<url>
scp://${wasserver.username}:${wasserver.password}@${wasserver.ip}:${wasserver.web.dir}
</url>
<inputDirectory>${web.output.exploded.dir}</inputDirectory>
</configuration>
</execution>
<!-- 웹파일 배포 작업 -->
<execution>
<id>deploy-html</id>
<phase>pre-integration-test</phase>
<goals>
<goal>deploy</goal>
</goals>
<configuration>
<id>deploy-html</id>
<url>
scp://${webserver.username}:${webserver.password}@${webserver.ip}:${webserver.htdocs.dir}
</url>
<inputDirectory>${web.output.html.dir}</inputDirectory>
</configuration>
</execution>
</executions>
</plugin>
현재까지 패턴을 적용하여 임의의 파일/디렉토리를 내 맘대로 전송할 수 있는 방법은 메이븐에서는 antrun을 이용하는 방법밖에 없는 듯싶다. maven의 wagon api와 file management api 이용하여 직접 플러그인을 만드는 것도 재밌을거 같다.
'Build&Deploy > Maven' 카테고리의 다른 글
Maven : 궁금한 거.... (0) | 2008.10.02 |
---|---|
Maven : pom.xml에서 민감한 데이터 감추기 (0) | 2008.10.02 |
Maven : 프로퍼티를 properties '파일'로 분리하기 (0) | 2008.10.01 |
Maven : 메이븐으로 외부 메이븐 프로젝트 빌드하기 (0) | 2008.10.01 |
Maven : test, deploy phase 건너뛰기 (0) | 2008.10.01 |