2016-11-15 13 views
4

私はGradleを使用しています。私は2つのタスクを持っています: "a"と "b"。私は仕事 "a"を仕事 "b"を呼びたいと思う。これどうやってするの?グラデーションのタスクから別のタスクを呼び出す

task b(type: Exec) { 
    description "Task B" 
    commandLine 'echo', 'task-b' 
} 

task a(type: Exec) { 
    description "Task A" 
    commandLine 'echo', 'task-a' 
    // TODO: run task b 
} 

はアリでは、これはケーキの一部である:

<target name="a"> 
    <echo message="task-a"/> 
    <antcall target="b"/> 
</target> 
<target name="b"> 
    <echo message="task-b"/> 
</target> 

Iが "DEPENDSON" 機能を使用して試みた最初の方法。しかし、これは理想的ではありません。すべてのタスクを逆に考える必要があり、条件が満たされたときにタスクを実行するなどのいくつかの問題があります。

私が試したもう一つの方法は次のとおりです。

gradle -q a b 

も理想的ではありません。私はそうのようなGradleのタスクを実行し

b.mustRunAfter(a) 

しかし、こののみ動作します。

単に既存のタスクから別のタスクを呼び出すだけですか?

+1

何ファイナライザタスクについてはどうですか? https://docs.gradle.org/current/userguide/more_about_tasks.html#sec:finalizer_tasks – AdamSkywalker

答えて

6

としては、一つの方法は、必要に応じて、その後、我々は他のタスクを実行することができますタスク

task beta << { 
    println 'Hello from beta' 
} 

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

// some condition 
if (project.hasProperty("doBeta")) { 
    alpha.finalizedBy beta 
} 

のためのファイナライザを追加することです示唆しました。他のタスクからタスクを実行する場合、それを行うことはできません。タスク宣言は宣言的ではありません。したがって、タスクは別のタスクに依存することができますが、別のタスクを実行することはできません。

$ gradle -q alpha 
Hello from alpha 
$ gradle -q alpha -PdoBeta 
Hello from alpha 
Hello from beta 
4

を使用でき

a.dependsOn 'b' 

それとも

a.dependsOn b 

それとも

task a(type: Exec, dependsOn: 'b') { ... } 

など

の代わりにleftShift(<<)の非非推奨doLastを使用して、@JBirdVegasと@ランス-Javaからの回答をまとめたものと組み合わせるにはadding dependencies to tasks

2

を参照してください:

task beta { 
    doLast { 
     println 'Hello from beta' 
    } 
} 

task alpha { 
    doLast { 
     println 'Hello from alpha' 
    } 
} 

// some condition 
if (project.hasProperty('doBeta')) { 
    alpha.finalizedBy beta // run 'beta' after 'alpha' 
    // or 
    // alpha.dependsOn beta // run 'beta' before 'alpha' 
} 
関連する問題