2014-09-12 18 views
1

我想從Gradle Tooling運行的任務中獲取結果。我定義了ResultHandler,但是在方法onComplete(Object result)中我得到了空值。輸入gradle cR後,我得到如下輸出:Gradle ResultHandler返回null

:returnString UP-TO-DATE 
BUILD SUCCESSFUL 
Total time: 0.98 secs 
Result received: null 
:checkResult UP-TO-DATE 

我該如何從我的任務「returnString()」中得到結果。 這是我的build.gradle:

import org.gradle.tooling.* 

apply plugin: 'groovy' 

dependencies { 
    compile 'org.codehaus.groovy:groovy-all:2.3.3' 
} 

task returnString() { 
    return "STRING!" 
} 

task checkResult() <<{ 
    GradleConnector connector = GradleConnector.newConnector();  
    connector.forProjectDirectory(new File(".")); 
    ProjectConnection connection = connector.connect(); 
    try { 
     // Configure the build 
     BuildLauncher launcher = connection.newBuild(); 
     launcher.forTasks("returnString"); 
     // Run the build 
     ResultLoader resultHandler = new ResultLoader() 
     launcher.run(resultHandler);    
    } finally { 
     // Clean up 
     connection.close(); 
    } 
} 

class ResultLoader implements ResultHandler<Object>{ 

    void onComplete(Object result){ 
     println "Result received: "+ result.toString() 
    } 
    void onFailure(GradleConnectionException failure){ 
     println failure 
    } 
} 

回答

1

你操作成功完成和的onComplete()回調被通報。我不確定你期望得到什麼。如果運行getModel()方法之一或者要求執行BuildAction,將會有結果值。 LongRunningOperation用於運行所有這三個操作:構建,模型檢索,操作(http://www.gradle.org/docs/current/javadoc/org/gradle/tooling/LongRunningOperation.html)。

順便說一句:我不清楚爲什麼你從已經運行的另一個版本開始,但它與你的問題無關。

+0

我期望在方法onComplete(..)中得到執行任務returnString()的結果,這是一個「STRING!」。所以輸出應該是「收到的結果:STRING!」。 這個例子被簡化以暴露ResultHandler問題。我想在不同位置的不同任務之間使用ResultHandler(跨越構建文件和項目) – 2014-09-12 12:19:23

+0

1.您的「返回」STRING「在配置階段執行,而不是作爲任務操作的一部分! 2.由任務執行的操作沒有返回值。 http://www.gradle.org/docs/current/javadoc/org/gradle/api/Task.html - 它們使用'doFirst()'或'doLast()'添加,或者您可以使用'task name << {...}'語法。 3.開始另一個版本聽起來非常無效。我建議你仔細看看任務如何工作 - http://www.gradle.org/docs/current/userguide/more_about_tasks.html有關任務輸入和輸出的部分可以給你一些想法。 – Radim 2014-09-12 13:00:03