2016-11-03 6 views
1

私はこのようなカスタムのGradleプラグインを作成して、のGradle:複数のサブタスクが同じ拡張子変数オブジェクトを共有

DummyPlugin.java

public class DummyPlugin implements Plugin<Project> { 
    @Override 
    public void apply(Project project) { 
     project.getTasks().create("dummy", DummyTask.class); 
     project.getExtensions().create("dummy", DummyExtension.class); 
    } 
} 

DummyTask.java

public class DummyTask extends Test { 
    @TaskAction 
    public void dummy() { 
     Project project = getProject(); 
     DummyExtension extension = project.getExtensions().findByType(DummyExtension.class); 
     System.out.println("Env of dummy is " + extension.getEnv()); 
    } 
} 

DummyExtension.java

public class DummyExtension { 
    private String env; 

    public String getEnv() { 
     return env; 
    } 

    public void setEnv(String env) { 
     this.env = env; 
    } 
} 

今、私はこのように、異なる環境のための3つのタスクを作成しました:

apply plugin: 'dummy' 

task dummyCI(type: DummyTask) { 
    dummy { 
     env = 'ci' 
    } 
} 

task dummyDev(type: DummyTask) { 
    dummy { 
     env = 'dev' 
    } 
} 

task dummyTest(type: DummyTask) { 
    dummy { 
     env = 'test' 
    } 
} 

しかし、代わりにEnv of dummy is ciを得るための、./gradlew dummyCIを実行する上で、私はEnv of dummy is testを取得しています。 ./gradlew dummyDevでも同じです。

この問題を解決するにはどうすればよいですか?ありがとう。

答えて

2

拡張プロパティは、常に実行される設定フェーズで設定します。したがって、各呼び出しは前のものを上書きします。実行フェーズで設定するには、ブロックdoFirst { ... }を使用します。例:

task dummyCI(type: DummyTask) { 
    doFirst { 
     dummy { 
      env = 'ci' 
     } 
    } 
} 

それとも、より良い解決策はDummyTask

+0

おかげで男にenvプロパティ(入力を?)を追加し、すべて一緒にし、代わりに拡張オブジェクトを取り除くことです。それは働いた.. :) – Msp

関連する問題