web-dev-qa-db-ja.com

ビルドに使用されるすべてのgradle値をダンプする方法

マルチプロジェクトのgradleビルドがAndroid studioにあります。時々、何かを変更する必要があります。通常は1行か2行のコードしかありませんが、どこにあるかを簡単に知ることはできません。どのプロパティがどこに存在するかを知るのは非常に難しいので、ダンプのようなものが欲しいです-その時点ですべてのプロパティとその子を見ることができるすべてのもの、これは変更をはるかに簡単にします

私はこれを見つけました

def void explainMe(it){
    //println "Examining $it.name:"
    println "Meta:"
    println it.metaClass.metaMethods*.name.sort().unique()
    println "Methods:"
    println it.metaClass.methods*.name.sort().unique()
    println "Depends On:"
    //println it.dependsOn.collect({it*.getName()})
    println "Properties:"
    println it.properties.entrySet()*.toString()
        .sort().toString().replaceAll(", ","\n")
}

これは問題ありませんが、トップレベルのスコープとそのすべての子に対して再帰的に呼び出し、最良の場合は出力をファイルに保存して検索できるようにします。何かアイデアをいただければ幸いです。あるいは、デバッガーをgradleビルドにアタッチして、内部の/ watch変数を検査することは可能でしょうか?

ありがとう

16
zebra

Gradleは、ビルドモデルの特定の部分(gradle tasksgradle help --task taskNamegradle propertiesgradle projectsgradle dependenciesgradle dependencyInsight、など)が、現在、任意のビルドモデルのプロパティとその値を詳細に検査するための一般的な機能はありません。代わりに、通常、ビルドスクリプトにprintlnsを追加するか、 Gradleビルド言語リファレンス を参照します。

2番目の質問に答えるために、Gradleビルドを他の外部アプリケーションと同じ方法でデバッグできます。必要なJVM引数(通常はデバッガーによって提供されます)は、Java_OPTSまたはGRADLE_OPTS環境変数を介して設定できます。デバッグするときは、--no-daemonを指定してGradleを実行するのがおそらく最善です。

10