2011-10-18 6 views
2

これは私が直面している状況です:現時点では、依存関係、リポジトリなど(親)を記述する2つのMavenプロジェクト、もう一方のpom.xmlを継承する子です。子どもと同じモデルに従って、今後作成されるモジュールが増えます。execプラグインを使用してMaven 3からスクリプトを実行するとブロックされます

私たちは、この時点でアクセス可能な場所にsftpを介してのみプロジェクトのサイト(maven-site-pluginで生成)を展開することに決めました。そして私は<distributionManagement>でサイトの場所を定義することは不可能であることを発見しました。なぜなら私はsftpプロトコル(私はwagon-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)を備えた最後のバージョン(3.7)であるEclipseを使用しています。 Eclipseでサイトを生成してデプロイするには、親プロジェクト> Run as> Maven build ...>parent clean site-deployを右クリックしました。

これらは親のpom.xmlの一部である:

<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> 

と子から:

<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を使用せずに(のexecプラグインを設定するさまざまな方法を試してみました親のプラグインの設定、引数部分の書き換えなど)、スクリプトを終了すると常にブロックされ、実行を終了しません。

サイトが正しくアップロードされていますが、サイトを更新するたびにMavenビルドの実行を手動で終了しないようにします(また、プロジェクトからジェンキンスサーバーにアーチファクトを展開する予定ですサイトの展開はうまくいけばうまくいくだろう)。

+0

愚かに聞こえるかもしれませんが、publish-site.shの最後にexit 0ステートメントを追加しようとしましたか? – drgn

答えて

0

私の答えは、投機の多くに基づいています...私は終了していないSSHコマンドについて同様の問題に直面し、その理由は以下のとおりであった:

たぶん「lftpのは、」終了しないプロセスを開始し、おそらく(おそらく)、maven-execプラグインはstdoutとstderrをループして終了する前に関連するすべてのメッセージを出力します。すべての作家によって閉じられていない場合、それは固執します。

「lftp」の出力を/ dev/nullにリダイレクトしようとします。