0

編集:David M. Karrの命題を考慮して、質問を言い換えました。

私はgradleプラグインを書いています。このプラグインは、GradleBuild を拡張するタスクを起動しています。外部 gradle ビルド ファイルには、パラメーターとしていくつかの情報が必要です。これらのパラメーターは、プロジェクトの拡張機能で提供されます。

プラグインコード

class MyPlugin implements Plugin<Project> {

    def mExt

    void apply(Project project) {

        mExt = project.extensions.create('myext',MyExt)

        project.task('myTask', type:GradleBuild){
            def param = new StartParameter()
            param.setProjectProperties([target:getTarget()])

            // Problem here
            startParameter = param
            buildFile = getMyBuildPath()
            tasks = [
                'build',
                'generateDebugJavadocJar'
            ]
        }
    }

    def getMyBuildPath(){
        ...
    }

    // Problem here
    def getTarget(){
        return {mExt.target}
    }
}

class MyExt {
    def String target = "uninitialised"
}

Gradle ビルド ファイル:

apply plugin : 'com.example.myplugin'

ext{
    target = "myTarget"
}

外部 Gradle ビルド ファイル:

task build(){
    println project.target
}

にクロージャーを入れると、文字列getTarget()println project.targetはなくクロージャーが表示されます。

クロージャーを置かない場合:

     // Problem here
    def getTarget(){
        return mExt.target
    }

次に、「myTarget」ではなく「uninitialized」になりました。

ここで myext.target の値を取得するにはどうすればよいですか?

私はgradle 2.3を使用しています

4

2 に答える 2

0

これを試して:

「MyExt」型の「myext」というインスタンス変数を定義します。

「適用」メソッドで、次のようにします。

myext = project.extensions.create('myext',MyExt)

「getTarget」メソッドで、「myext.target」を返します。

于 2015-03-20T22:50:05.507 に答える
0

project.afterEvaluate メソッドを使用して、目的を達成することに成功しました。この質問のおかげで

1) gradle ビルド タスクでstartParameter.projectPropertiesは、クロージャではなくマップを待機しています。したがって、怠惰な定義にクロージャーを配置するという考えは機能しません。

mExt.target2)またはへの参照をプラグインに直接配置するとproject.myext.target、初期値が設定されます。プラグインは既に評価されているため、build.gradle ファイルに入力された値は使用されません。

3)project.afterEvaluate()私の問題を解決します。クロージャーにより、プロジェクトの拡張機能を使用して myTask の構成が終了します。

void apply(Project project) {

    project.extensions.create('myext',MyExt)

    project.task('myTask', type:GradleBuild){
        buildFile = getMyBuildPath()
        tasks = [
            'build',
            'generateDebugJavadocJar'
        ]
    }

    project.afterEvaluate { proj ->
        proj.myTask.startParameter.projectProperties = [target:proj.myext.target]
    }
}
于 2015-03-23T09:31:25.803 に答える