2016-08-03 6 views
1
나는 .sh 스크립트를 실행하려면 다음 플러그인을 데

:간부 받는다는 플러그인 : 종료 코드

<plugin> 
    <artifactId>exec-maven-plugin</artifactId> 
    <groupId>org.codehaus.mojo</groupId> 
    <executions> 
    <execution> 
     <id>deploy-bundles</id> 
     <phase>install</phase> 
     <goals> 
     <goal>exec</goal> 
     </goals> 
     <configuration> 
     <executable>${basedir}/deploy.sh</executable> 
     <successCodes> 
      <successCode>0</successCode> <-- Not working 
     </successCodes> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

복사하는 특정 위치에 일부 폴더 및 파일을. 그것은 작동합니다. 그러나, 필자는 fail-on-error 메커니즘을 원합니다. 이미 내 .sh 스크립트에 set -e 명령이 있지만, 나는 또한 maven 솔루션을 원합니다. successCodes이라고하는 tag이 있다고 들었습니다.이를 통합하려고합니다. 그러나 지금까지 행운이 없습니다. 누군가 올바른 방법을 지적 할 수 있습니까?

편집 :.sh 스크립트는 다음과 같습니다

이 경우이 폴더를 실패 할 것으로 예상된다
cp ../template/config.properties $component/conf 
cp ../../runtime/group1/group1.mw/conf/log4j.xml $component/conf 
# if the component is planning, create an additional folder called plans 
if [[ $component == *".planning"* ]] 
then 
mkdir -p $component/plans 
    # copy all the plans here 
    cp ../../mission.planning/plans/* $component/plans 
fi 

/파일이 없습니다. 따라서 테스트로서 위의 경로를 수동으로 변경하고 실패 할 것으로 예상합니다. 그것은 실행 프로세스에 실패하고 나에게 오류를 알려주지 만 (.sh 스크립트에 set -e 명령이 있기 때문에), 그러나 메이븐 보고서는 "성공"으로 표시됩니다.

답변

2

이것은 Exec Maven 플러그인과 관련이 없지만 쉘 스크립트의 종료 코드를 처리 할 때의 문제입니다. 반환하지 않는 비 호환 응용 프로그램 (응용 프로그램에 대한 성공적인 실행으로 해결 될

종료 코드 :

successCodes 매개 변수는 실행 파일이 "성공적인 실행"에 대한 다른 종료 코드를 가지고 상황에 유용합니다 0 성공).

은 종료 코드 0을 성공한 것으로 간주하고 나머지는 모두 실패로 간주하며이 경우 빌드가 실패합니다.

쉘 스크립트에는 복수 명령 each of which has its own exit code이 있습니다. 별도의 처리없이 스크립트 자체의 종료 코드는 마지막 명령의 종료 코드입니다. 따라서 명령 중 하나가 실패 했으므로 (그 종료 코드가 0이 아니더라도) 그 후에 성공적인 명령은 스크립트 종료 코드를 0으로 재설정합니다. Maven 외부의 명령 행에서 스크립트를 호출하고 echo $? 변수 which contains the exit code

이와 같이 쉘에서 실패 할 수있는 각 호출 된 명령의 종료 코드를 테스트해야합니다. (a bit of arithmetic을 사용하여 각 종료 코드를 누적하실 수 있습니다.)

+0

완벽한 답변입니다. 감사합니다. –

관련 문제