2017-02-06 1 views

答えて

1

これはできません。最新のチェックは、doFirstが実行される直前の実行フェーズで実行されます。計算され、この値は格納されません。さらに、最新のチェックは前のタスクの出力に依存することがあります。したがって、タスクの最新ステータスを解決するには、すべての依存関係を実行する必要があります(dependsOnタスク)。したがって、あなたが求めていることは、理論上、最新ではない最初のタスクに対してのみ機能します。

どのようにライフサイクルの動作を確認するには、ここでは簡単な例です:

task hello { 
    println "CONFIG1" 
    outputs.upToDateWhen { 
     println "UPTODATE" 
     return false 
    } 
    println "CONFIG2" 
    doFirst { 
     println "DOFIRST" 
    } 
    doLast { 
     println "DOLAST" 
    } 
} 

あなたは--debugフラグでこれを実行すると、あなたはこれが最初に表示されます。

08:05:17.294 [DEBUG] [org.gradle.model.internal.registry.DefaultModelRegistry] Project : - Registering model element 'tasks.hello' (hidden = false) 
08:05:17.302 [QUIET] [system.out] CONFIG1 
08:05:17.329 [QUIET] [system.out] CONFIG2 
08:05:17.333 [DEBUG] [org.gradle.configuration.project.BuildScriptProcessor] Timing: Running the build script took 0.764 secs 

設定フェーズが設定されます最新のチェック。その後のGradleはタスクのグラフ計算:

08:16:26.212 [DEBUG] [org.gradle.execution.taskgraph.DefaultTaskGraphExecuter] Timing: Creating the DAG took 0.007 secs 

をそして唯一、それはタスクを実行します。

08:05:17.430 [INFO] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] :hello (Thread[main,5,main]) started. 
08:05:17.431 [LIFECYCLE] [class org.gradle.internal.buildevents.TaskExecutionLogger] :hello 
08:05:17.432 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Starting to execute task ':hello' 
08:05:17.461 [QUIET] [system.out] UPTODATE 
08:05:17.465 [INFO] [org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter] Putting task artifact state for task ':hello' into context took 0.032 secs. 
08:05:17.465 [DEBUG] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] Determining if task ':hello' is up-to-date 
08:05:17.465 [INFO] [org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter] Executing task ':hello' (up-to-date check took 0.0 secs) due to: 
    Task.upToDateWhen is false. 
08:05:17.466 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':hello'. 
08:05:17.467 [QUIET] [system.out] DOFIRST 
08:05:17.467 [QUIET] [system.out] DOLAST 

タスクのツリーが構築され、タスクが実行されているときにのみチェックが発生した最新の順番に。

このチェックで値が保存されないため、依存するすべてのタスクを実行せずにタスクの最新状態を判断することはできません。

+0

清算していただきありがとうございます。 – James

関連する問題