2012-01-23 13 views
11

私はこの権利をやっていないよ場合、私は知らないか、私は違った組み込みGradleのタスクを処理するために持っていますが、私はこのdoFirst/doLastクロージャで組み込みのgradleタスクをどのように実行しますか?

task testNGTests(type: Test) { 
    useTestNG() 
} 

し、それを使用しようとしていますように定義されたテストタスクを持っている場合この

task taskA { 
    doFirst { 
     testNGTests.execute() 
    } 
} 

ようdoFirst閉鎖が、それは何らかの理由で動作しません、私はまた、

testNGTests.executeTests() 

を試してみましたが、それはどちらか動作しませんでした。組み込みのテストタスクを処理する特別な方法はありますか?

私は別のタスクからタスクを実行するGradleのバージョン0.9.2

+0

タスクは '実行()'の呼び出しをサポートしていません。クロージャ(つまり、メソッドdefs)だけが行います。 –

答えて

14

を使用していますが正式にサポートさ(としたことはありません)ではありません。代わりにタスクの依存関係を使用してください。 taskA.dependsOn(testNGTests)

+1

しかし、複数の依存関係がある場合は順序をサポートする方法はありません。どうすればこの問題を回避できますか? – AgentRegEdit

+0

具体例を挙げてください。 'taskA.dependsOn(taskB、taskC)'は 'taskA.dependsOn(taskB);の省略形です。 taskA.dependsOn(taskC) 'です。もちろん、 'taskA.dependsOn(taskB);を実行することもできます。タスクBは、(タスクC) 'をオンにします。 –

+0

私は 'taskA(dependsOn:taskB、taskC)'グラデルがtaskC taskBを実行し、次にtaskAを実行しますが、 'taskA(dependsOn:taskC、taskB)'を実行してもgradBはtaskB、taskC 、taskA、依存関係はアルファベット順に並べられています。これはちょっと奇妙です。 – AgentRegEdit

6

これを行うには回避策が見つかりました。私のシナリオでは、ユーザーの入力を読み取るタスクがあり、彼のアンサーに応じて、さまざまな構成のEARを作成する必要があります。私はタイプGradleBuildの仕事を使いました。ここでは、コードは次のようになります。

task createEar() << { 
    def wichTypeOfEar = System.console().readLine("Which EAR?? (a, b)\n")  
    if(wichTypeOfEar == 'a'){ 
     tasks.earA.execute() 
    }else{ 
     tasks.earB.execute() 
    }  
} 

task earA(type: GradleBuild) { 
    doFirst{ 
     // Here I can do some stuffs related to ear A 
    } 
    tasks = ['ear'] 
} 

task earB(type: GradleBuild) { 
    doFirst{ 
     // Here I can do some stuffs related to ear B 
    } 
    tasks = ['ear'] 
} 

ear { 
    //Here is the common built in EAR task from 'ear' plugin 
} 

あなたは、あなたが次のことを行うことができますケース:

task testNGTests(type: Test) { 
    useTestNG()  
} 

task testNGTestsWrapper(type: GradleBuild){ 
    tasks = ['testNGTests'] 
} 

task taskA { 
    doFirst { 
    testNGTestsWrapper.execute() 
    } 
} 
+0

なぜ実行する前に 'tasks.'を前に付ける必要がありますか? –

関連する問題