0

私の build.gradle スクリプトには多くのタスクがあり、それぞれが 0 個以上の他のタスクに依存しています。

呼び出すことができる 3 つの「メイン」タスクがあります: moduleInstallationbackupFilesおよびrestoreFiles

質問は次のとおりです。実行するタスクと実行する必要のないタスクをGradleに伝えたいと思います。たとえば、 を呼び出すときに、依存するすべてのタスクを (それらの に関係なく)moduleInstallation実行したいのですが、復元タスクは実行したくありません。タスクが実行されるフェーズ (構成フェーズ、実行フェーズなど) やその他のいくつかを変更しようとしましたが、すべてのタスクが実行され続けます。UP-TO-DATE flag

私が考えた解決策は、メイン タスクで、このメイン タスクが呼び出されたときに (fe moduleInstallation)、UP-TO-DATE flag関連のないすべてのタスクを false に設定して実行しないようにすることでした。それは可能ですか?

編集:ここに例があります:

(に依存する)moduleInstallationが呼び出されるとbackupFilesrestoreFiles( に依存するrestoreFromDate) も実行されます。

最初の主なアクション

task moduleInstallation << {
    println "Hello from moduleInstallation"
}

task backupFiles {
    doLast {
        println "Hello from backupFiles"
    }
}

2 番目のメイン アクション

task restoreFiles {
    println "Hello from restoreFiles"
}

task restoreFromDate {
    println "Hello from restoreFromDate"
}

依存関係:

moduleInstallation.dependsOn backupFiles 
restoreFiles.dependsOn restoreFromDate

したがってgradle moduleInstallation、ターミナルに入力すると、次の出力が得られます。

Hello from restoreFromDate
Hello from restoreFiles
Hello from backupFiles
Hello from moduleInstallation 
4

1 に答える 1

3

doLast2 番目のスニペットは、最初のスニペットと同様に(またはその<<ショートカット)を使用する必要があります。それ以外の場合、コードは構成コードであり、最終的にどのタスクが実行されるかに関係なく、常に評価されます。つまり、ここで実行されているのはタスクrestoreFilesrestoreFromDateタスクではなく (表示されていないコマンド ライン出力のビットからわかるように)、それらの構成コード (のみ) です。

ここで何が起こっているのか (Gradle を理解するために重要です) をよりよく理解するために、 Gradle User GuideのBuild Lifecycleの章を読むことをお勧めします。

于 2013-05-03T10:46:45.817 に答える