2017-01-04 17 views
0

私のGradleのビルドがある2タスク:のGradle:タスクの設定は、別のタスクの実行に依存

  • findRevision(タイプ:SvnInfo)
  • buildWAR(タイプ:MavenExec、DEPENDSON:findRevision)

どちらのタスクも構成ベースですが、buildWARタスクはfindRevisionタスクの実行段階でのみ定義されたプロジェクトプロパティに依存します。

Gradleのは、それがbuildWARタスクを設定しようとする時に言ったプロパティを見つけることができないので、これは、プロセスを中断します。

は、別のタスクが実行されるまで、結合またはコンフィギュレーションを遅延する方法はありますか?私が代わりにMavenExecタスクタイプのmavenexec方法を利用することができます。この特定のケースで

が、何には別の方法が存在しない同様のシナリオで行われるべき?

+0

おそらく、あなたは '' writeRevisionPropertyFile'にfindRevision'を変更することができます。その後、 'buildWAR'はプロパティファイルを入力として使用することができます –

答えて

0

正確にあなたが変更したい設定オプションに応じて、あなたはbuildWAR.doFirst { }でタスクの実行段階でそれを変更する場合があります。しかし、これは本当に悪い考えです。あなたがe。 g。例えば入力ファイルのようなUP-TO-DATEチェックの結果に影響を与える何かを変更すると、タスクは実行されるかもしれませんが、必要ではないか、悪い場合には実行する必要があります。もちろん、outputs.upToDateWhen { false }でこれを克服するためにタスクを常に実行させることはできますが、他の問題があり、Gradlesの最大の強みの1つを無効にする方法もあります。

必要がないよう、ビルドを再設計するためにはるかに良いアイデアです。たとえば、設定時にリビジョンをすでに決定しています。タスクが多くの時間を必要とするかどうかによって、これは実行可能な解決策である可能性があります。また、リビジョンで何をしたいかによって、@ LanceJavaの提案を検討し、findRevisionタスクでリビジョンを含むファイルを生成し、それをWARにパッケージ化して実行時に使用することもできます。

+0

ありがとう、私はdoFirstでプロパティを変更することができなかったことを認識しませんでした。あなたが提起した懸念を念頭に置いて使用しますが、私の場合は必要と考えています。 – Zecrates

関連する問題