2017-09-13 20 views
0

私はJavaでGradleプラグインを実装しました。私はthis tutorialに続いた。次のようにGradle Pluginの依存関係のみを設定する

私のプラグインクラスにはなります

public class DemoPlugin implements Plugin<Project> { 
    @Override 
    public void apply(Project project) { 
     project.getExtensions().create("DemoSetting", DemoPluginExtension.class); 

     project.getTasks().create("demo", DemoTask.class); 
    } 
} 

現在、私はonlyIf機能を実装することを目的としていますが、残念ながら私はまだ成功していませんでした。

私の試みは以下の通りです:

public class DemoPlugin implements Plugin<Project> { 
    @Override 
    public void apply(Project project) { 
     DemoPluginExtension ext = project.getExtensions().create("demoSetting", DemoPluginExtension.class); 

     Closure closure = new Closure(this) { 
      public Object doCall() { 
       return ext.isExecuteTask(); 
      } 
     }; 

     project.getTasks().create("demoProperties", demoTask.class).onlyIf(closure); 
    } 
} 

私が観察していますエラーは次のとおりです: ':デモ' 実行がタスクに失敗しました:何が悪かったのか

。 タスクが実行を開始した後、タスク ':demo'でTask.setOnlyIf(Closure)を呼び出すことができません。

誰かが私にこの問題を解決するヒントを与えることができたら本当に感謝します。

+0

完全なコンパイル可能な例を提供してください。 – Opal

+1

クローズはGroovyの概念です。 Javaがクロージャを処理するためのサポートを提供していても、Gradle APIのJava同等物、この場合は 'onlyIf(Spec <?extends Task>)メソッドを使用することをお勧めします。 –

+0

最後に、public Object doCall()ではなくpublic Object call(Object arguments)メソッドを実装して解決しました。 – pafede2

答えて

0

最後に、私は次のコードを使用して、それを解く:

public class DemoPlugin implements Plugin<Project> { 
    @Override 
    public void apply(Project project) { 
     DemoPluginExtension ext = project.getExtensions().create("demoSetting", DemoPluginExtension.class); 

     project.getTasks().create("demoProperties", demoTask.class).onlyIf(new Closure(this) { 
      public Object call(Object arguments) { 
       return true; 
      } 
     }); 
    } 
} 

方法

パブリックオブジェクトの呼び出し(オブジェクトの引数)

代わりの

の実装に注意してください。

public Object doCall()

関連する問題