Gradle передать динамическое значение как системное свойство метода - PullRequest
0 голосов
/ 25 августа 2018

У меня есть проект gradle, в котором есть вычисляемая переменная, которую я должен передать в приложение.Когда я пытаюсь сделать это, передается нулевое значение, а не заданное значение, которое я хочу.

У меня есть файл примера ниже, который демонстрирует проблему для запуска, просто сделайте gradle foo. Я хочу, чтобы обе строки вывода были равны 4.

def String sum

task add {
    doLast {
        new ByteArrayOutputStream().withStream { os ->
            def result = exec {
                executable = 'sh'
                args = ['-c', 'echo $((2 + 2))']
                standardOutput = os
            }
            sum = os.toString()
            afterEvaluate {
                tasks.foo {
                    systemProperty "foo.bar", "${sum}"
                }
            }
        }
    }
}

task foo {
    doLast{
        println System.properties['foo.bar']
        println "${sum}"
    }
}

tasks.foo.dependsOn( add )

1 Ответ

0 голосов
/ 25 августа 2018

Учитывая это (обратите внимание на простое присвоение System.properties['foo.bar']):

def String sum

task add {
    doLast {
        new ByteArrayOutputStream().withStream { os ->
            def result = exec {
                executable = 'sh'
                args = ['-c', 'echo $((2 + 2))']
                standardOutput = os
            }
            sum = os.toString()
            System.properties['foo.bar'] = sum
        }
    }
}

task foo {
    doLast{
        println System.properties['foo.bar']
        println "${sum}"
    }
}

tasks.foo.dependsOn( add )

, тогда это вывод:

$ gradle foo 
:add
:foo
4

4
...