2010-02-13 4 views
6

배경 : maven 프로젝트에서 기능 테스트 모듈을 설정 중입니다. 우리는 테스트를 위해 maven-jetty-plugin을 사용합니다.부두를 달리는 법 : Maven 좌표로 정의 된 전쟁을 사용하는 달리기?

방파제 플러그인을 가지고 있습니다 (Failsafe 플러그인으로 멋지게 플레이하기 위해) as described here을 설정했는데, 방금 설치 한 방파제를 사용하여 주 웹 모듈에서 전쟁 유물을 배포하고 싶습니다 기능 테스트 모듈이 실행될 때까지 로컬 메이븐 레포로).

jetty 플러그인의 run-war goal에는 배포 할 전쟁 경로를 취하는 <webApp> 요소가 있습니다. 차라리 Web 모듈에서 정의한 좌표를 사용하여 배포 할 전쟁을 지정하는 것이 좋습니다. 이 일을 할 수있는 방법이 있습니까?

가능한 해결 방법 :

  1. Section 4.13 of "Better Builds with Maven" 전쟁을 배포하는화물을 사용하여 설명을 받는다는 좌표를 사용하여 지정하지만 잔인한 우리가 부두를 사용하고 주어진 심각한입니다.
  2. 좀 더 알맞은 IMO는 dependency를 사용합니다 : just-built-and-installed war 아티팩트를 기능 테스트 모듈의 대상 디렉토리에있는 고정 경로에 복사합니다. 그런 다음 jetty 플러그인의 <webApp> 구성 요소에 제공 할 수 있습니다.

답변

9

부두 플러그인의 실행 전쟁 목표는 배포 전쟁에 문자열 경로를 소요 요소를 가지고있다. 차라리 Web 모듈에서 정의한 좌표를 사용하여 배포 할 전쟁을 지정하는 것이 좋습니다. 이 일을 할 수있는 방법이 있습니까?

이것은 실제로는 maven jetty plugin이 사용되지 않아야한다는 것을 의미합니다. 플러그인은 현재 모듈의 전쟁을 전개합니다. 수행하려는 작업은 기본적으로 지원되지 않습니다. 4.13는 "더 나은은 메이븐으로 빌드"

섹션

예,화물 깨끗한 방법으로이 작업을 수행 할 수 받는다는 좌표를 사용하여 전쟁을 배포하는화물을 지정된 사용에 대해 설명합니다.

하지만 우리가 부두를 사용한다는 것은 과격한 행동입니다.

동의하지 않습니다. 첫째, 부두 플러그인은 사용자가 원하는 것을 지원하지 않습니다 (올바른 도구가 아닐 수도 있습니다). 둘째로, 심각한 과도한은 과장되어 있습니다. 특히,화물에 임베디드 부두가 거의 구성되어 있지 않으면 (오리지널?) 오해입니다.

더 IMO 종속성 사용하고 적당한 : 기능 테스트 모듈의 대상 디렉토리

없음 공격하지만, 전체 질문의 소리에 고정 경로로 바로 제작 및 설치 전쟁 유물을 복사하는 복사 약간은 다음과 같다 : 나는 망치를 가지고있다, 그것은 손톱을 위해 좋았다, 나사 드라이버를 얻는 것이 진지한 잔인한 것처럼 보이는 것에 따라 나는 그것을 나사에 사용할 수 있냐?이 질문에 답하기 위해 dependency:copy을 사용하고 Maven Jetty 플러그인으로 모든 작업을 수행 할 수 있습니다. 그러나 이것은 해킹입니다 (실제로 어떤 질문도하지 않으므로, 이것에 대한 의견을 원했습니다.)

<dependencies> 
    <dependency> 
    <groupId>war group id</groupId> 
    <artifactId>war artifact id</artifactId> 
    <type>war</type> 
    <version>war version</version> 
    </dependency> 
    ... 
</dependencies> 
... 
<build> 
    <plugins> 
    <plugin> 
     <groupId>org.codehaus.cargo</groupId> 
     <artifactId>cargo-maven2-plugin</artifactId> 
     <configuration> 
     <!-- Container configuration --> 
     <container> 
      <containerId>jetty6x</containerId> 
      <type>embedded</type> 
     </container> 
     <!-- Configuration to use with the container or the deployer --> 
     <configuration> 
      <deployables> 
      <deployable> 
       <groupId>war group id</groupId> 
       <artifactId>war artifact id</artifactId> 
       <type>war</type> 
       <properties> 
       <context>war context</context> 
       </properties> 
      </deployable> 
      </deployables> 
     </configuration> 
     <!-- Don't wait, execute the tests after the container is started --> 
     <wait>false</wait> 
     </configuration> 
     <executions> 
     <execution> 
      <id>start-container</id> 
      <phase>pre-integration-test</phase> 
      <goals> 
      <goal>start</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>stop-container</id> 
      <phase>post-integration-test</phase> 
      <goals> 
      <goal>stop</goal> 
      </goals> 
     </execution> 
     </executions> 
    </plugin> 
    ... 
    </plugins> 
    ... 
</build> 

을 그리고 난이 객관적의 "로 규정 될 수 있다고 생각하지 않습니다 물론 최종 결정은

그냥 경우에, 여기에 내가화물이 어떻게 구현 될 수있다 :) 속한 심각한 과잉 "

+0

Geronimo와 함께 사용 된 나의 처음 보는화물에서 '심각한 과충전'이 발생했다. 그 시점에서, 나는 webapp 컨테이너가 아니라 배치 도구로 추측했다. 어제 * shrug *). 어쨌든, 당신 말이 맞습니다.화물이 갈 길이었습니다. 그리고 위에서 공유 한 설정은 내가 필요로했던 것의 99 %였습니다. 도움과 설명에 감사드립니다. – cemerick

+0

@Chas 문제 없습니다. 나는이 점을 분명히 밝혀 준 것을 기쁘게 생각합니다. 행운을 빕니다. –

관련 문제