web-dev-qa-db-ja.com

Gradle:あるタスクから別のタスクに変数を渡す

同じbuild.gradleファイルで、あるタスクから別のタスクに変数を渡します。最初のgradleタスクが最後のコミットメッセージをプルします。このメッセージを別のタスクに渡す必要があります。コードは次のとおりです。事前に助けてくれてありがとう。

task gitMsg(type:Exec){
    commandLine 'git', 'log', '-1', '--oneline'
    standardOutput = new ByteArrayOutputStream()
    doLast {
       String output = standardOutput.toString()
    }
}

変数 'output'を以下のタスクに渡したいです。

task notifyTaskUpcoming << {
    def to = System.getProperty("to")
    def subj = System.getProperty('subj') 
    def body = "Hello... "
    sendmail(to, subj, body)
}

Gitメッセージを「body」に組み込みたいです。

21
crystallinity

outputメソッドの外部で、ただしスクリプトルートでdoLast変数を定義してから、別のタスクで単純に使用できます。ちょうど例:

//the variable is defined within script root
def String variable

task task1 << {
    //but initialized only in the task's method
    variable = "some value"
}

task task2 << {
    //you can assign a variable to the local one
    def body = variable
    println(body)

    //or simply use the variable itself
    println(variable)
}
task2.dependsOn task1

ここに定義された2つのタスクがあります。 Task2Task1に依存します。つまり、2番目は1番目の後にのみ実行されます。 String型のvariableは、ビルドスクリプトルートで宣言され、task1doLastメソッドで初期化されます(注:<<doLastと等しい)。その後、変数は初期化され、他のタスクで使用できます。

12
Stanislav

グローバルプロパティは避けるべきだと思いますが、gradleはプロパティをタスクに追加することで、これを実現する良い方法を提供します。

task task1 {
     doLast {
          task1.ext.variable = "some value"
     }
}

task task2 {
    dependsOn task1
    doLast { 
        println(task1.variable)
    }
}
46
Rene Groeschke