6

質問

両方のタスクが実行される場合、タスクが別のタスクの前/後に実行されることをどうにかして確認できますか? それらの間に常に存在する依存関係を追加したくありません。

バックグラウンド

サーバーを起動するタスクとサーバーに対してテストを実行するタスクの 2 つがあります。そのサーバーを起動するタスクは、新しいプロセスでそれを実行するので、実行できますgradle startServer runServerTests。サーバーの起動には時間がかかるため、1 つの gradle プロセスでサーバーを起動し、別の gradle プロセスでテストを数回実行できる必要があります。

ここで、サーバーの起動とサーバー テストの実行を含む、CI 環境が行うすべてのことを行う単一のタスクを作成しようとしています。テストを実行する前にサーバーが起動していることを確認したいのは明らかですが、今のところうまくいきません。

試み

私の最初の試みは以下ですが、定義された依存関係の順序が保証されていないため、それは機能しません:

task doItAll(dependsOn: [startServer, runServerTests]) { ... }

アクションでタスクを呼び出す 2 回目の試みは機能せず、サポートされていません。

task doItAll() << {
  tasks.startServer.execute()
  tasks.runServerTests.execute()
}

解決策はロードマップにあります ( GRADLE-294Initializer/Finalizer ) が、今は役に立ちません。

4

5 に答える 5

6

現時点ではあまり役に立たないかもしれませんが、私は最近この分野でプルリクエストを提出し、1.6 にする必要があることをほのめかしました (現在 1.5 をリリースしていますが、PR は行われませんでした)。そのリリース) -ここでの議論を参照してください。最善の策は、プル リクエストが 1.5 リリース後に master にマージされるのを待ってから、ここから利用可能な最初のナイトリー ビルドを取得することです。

編集

Gradle 1.6 は少し前にリリースされており、今では簡単mustRunAfterにそれを実現できます。詳細については、Gradle マニュアルのタスクの順序に関するセクションを参照してください。

于 2013-03-07T23:07:30.843 に答える
1

http://issues.gradle.org/browse/GRADLE-294は 5 月 1 日 (Gradle 1.6) に解決され、mustRunAfter() 関係を使用するときに両方が存在する場合、タスク B が A の前に実行される必要があることを説明する方法が提供されますタスクの間。

したがって、あなたの質問は完全に答えられていると思います。

于 2013-05-28T07:15:17.013 に答える
0

単一のタスクの依存関係を明示的に宣言することで、順序付けの問題を解決できます。

runServerTests.dependsOn startServer

task doItAll(dependsOn: runServerTests) << {
   // do something
}

パイプラインには、別のコンポーネント (テスト目的でサーブレット コンテナーなど) を起動するための特定のユース ケースに対処する作業があります。

于 2013-03-06T18:51:00.213 に答える