2011-10-18 2 views
2

이것은 내가 직면 한 상황입니다. 현재 두 개의 Maven 프로젝트가 있지만 종속성, 리포지토리 등 (부모)을 설명하는 것은 두 개뿐입니다. 다른 쪽의 pom.xml을 상속받은 자식. 미래에 만들어 질 모듈이 아이와 같은 모델을 따라 더 많아 질 것입니다.exec 플러그인을 사용하여 Maven 3에서 스크립트를 실행하면 차단됨 -

우리는 프로젝트 사이트 (maven-site-plugin으로 생성)를 sftp을 통해서만이 시점에 액세스 할 수있는 위치에 배포하기로 결정했습니다. 그리고 내가 sftp 프로토콜을 통합 할 수 없기 때문에 <distributionManagement>에 사이트 위치를 정의하는 것이 불가능하다는 것을 알았습니다. (왜건 -ssh-external를 사용해 보았습니다.)

echo "Uploading the site.." 
lftp -u ${username},${password} sftp://${host} <<EOF 
mirror -R --delete-first $sitedir $remotedir 
echo "Exiting from lftp.." 
bye 
EOF 
echo "Terminating script execution.." 

이 :

은 결과, 나는 상을 사이트 배포 원격 컴퓨터에 연결하고 우리의 사이트 동안 전개되는 로컬 폴더의 내용을 업로드하는 스크립트를 만들었습니다 상위 사이트에 대해 완벽하게 작동하고 로컬에서 생성 된 바로 사이트를 업로드하지만 자식이 스크립트 끝 부분에 도달하면 올바르게 끝내지 않고 Terminating script execution..을 인쇄하여 그대로 유지합니다.

저는 Maven 플러그인 (v. 3.0.2)이있는 마지막 버전 인 Eclipse (3.7)를 사용하고 있습니다. Eclipse에서 사이트를 생성하고 배포하기 위해 부모 프로젝트를 마우스 오른쪽 버튼으로 클릭 한 다음 실행> Maven 빌드 ...>parent clean site-deploy을 마우스 오른쪽 버튼으로 클릭했습니다.

이들의 부분입니다 부모의 pom.xml : 나는 간부 플러그인을 구성하는 여러 가지 방법을 시도했습니다

<build> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId>   
    <artifactId>exec-maven-plugin</artifactId> 
    <executions> 
    <execution> 
    <id>sh</id> 
    <phase>site-deploy</phase>   
    <goals> 
    <goal>exec</goal> 
    </goals> 
    <configuration> 
    <executable>sh</executable> 
    <arguments> 
     <argument>../parent/publish-site.sh</argument> 
     <argument>${localsitedir}/child</argument> 
     ... 
    </arguments> 
    </configuration> 
    </execution> 
    </executions> 
</plugin> 
</build> 

(pluginManagement를 사용하여 상속하지 않고 :

<distributionManagement> 
<!-- Generate the site locally, then it'll be uploaded to the server --> 
<!-- Children will append their artifact ID to the base url --> 
<site> 
    <id>project-name</id> 
    <name>Project Name</name> 
    <url>file://${env.HOME}/testsite/</url> 
</site> 
</distributionManagement> 
... 
<build> 
<pluginManagement> 
<plugins> 
    <plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>exec-maven-plugin</artifactId> 
    <version>1.2.1</version> 
    </plugin> 
</plugins> 
</pluginManagement> 
<plugins> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-site-plugin</artifactId> 
    <version>3.0</version> 
    <configuration> 
    ... 
</plugin> 
<plugin> 
    <groupId>org.codehaus.mojo</groupId>   
    <artifactId>exec-maven-plugin</artifactId> 
    <inherited>false</inherited> 
    <executions> 
    <execution> 
    <id>sh</id> 
    <phase>site-deploy</phase> 
    <goals> 
    <goal>exec</goal> 
    </goals> 
    <configuration> 
    <executable>sh</executable> 
    <arguments> 
     <argument>publish-site.sh</argument> 
     <argument>${localsitedir}</argument> 
     ... 
    </arguments> 
    </configuration> 
    </execution> 
    </executions> 
</plugin> 
</plugins> 
</build> 

그리고 아이에서

부모의 플러그인 구성 및 인수 부분 만 다시 작성 등). 스크립트 완료시 항상 차단되어 실행을 종료하지 않습니다.

사이트가 올바르게 업로드되었지만 당연히 사이트를 업데이트 할 때마다 수동으로 Maven 빌드 실행을 종료하고 싶지는 않습니다. 또한 프로젝트의 이슈를 Jenkins 서버에 배포 할 계획입니다 그래서 사이트 배포가 그때까지는 잘 될 것입니다.) ,

어쩌면 'lftp가이'종료되지 않는 프로세스를 시작

:

+0

아마도 바보 같지만 publish-site.sh 끝 부분에 exit 0 문을 추가하려고 했습니까? – drgn

답변

0

내 대답은 많은 추측을 기반으로 ... 나는 종료하지 않는 SSH 명령에 대한 유사한 문제에 직면하고 이유였다 아마도 (아마) maven-exec plugin은 stdout과 stderr을 루프하여 종료하기 전에 모든 관련 메시지를 출력합니다. 모든 작가들에 의해 닫히지 않으면, 그것은 붙어 있습니다.

"lftp"의 출력을/dev/null로 리디렉션하려고합니다.