[解決済み] gradleのタスク定義でgroovyの構文を理解する
質問
私はGradleとGroovyの初心者で、gradleタスクが定義されるときにgroovyのレベルで何が起こっているかを理解しようとしています。
task hello {
println "configuring task hello"
doLast {
println "hello there"
}
}
Gradle In Action"を読んで、私はこのメソッドが
task hello {}
の呼び出しは、実際には
task()
メソッドの呼び出しです。
Project
インターフェイスのメソッドです。77ページで、taskと呼ばれる4つのメソッドが
Project
インターフェイスで
task(args: Map<String,?>, name:String)
task(args: Map<String,?>, name:String, c:Closure)
task(name: String)
task(name: String, c:Closure)
というのはわかりますが
{}
はクロージャ本体です。
私が理解していないのは、groovyがどのように
hello
を
task hello { }
に従って
https://stackoverflow.com/a/25592665/438319
を変換するgroovyコンパイラのプラグインがあります。
task hello { }
を
task('hello', { })
私の質問
-
変換を行うGradle Groovy Compilerプラグインについての情報はどこで見つけることができますか?
-
gradleは何らかの形でGroovyプログラミング言語を拡張しているので、Gradleスクリプトはgroovyプログラムであるという主張は技術的に正しくないのでしょうか?
-
を取得する方法はありますか?
gradle
コマンドを実行して、コンパイラプラグインが実行された後に生成された基本的なgroovyコードを出力する方法はありますか?
どのように解決するのですか?
Gradleは ASTトランスフォーメーション を使用して Groovy の構文を拡張します。あなたが言及したタスク定義の構文は、Gradleが適用する変換の1つに過ぎません。その変換のための実装を見つけることができます ここで . あなたの具体的な質問に答えるために。
-
Gradleが適用する個々の変換は、私が知る限りではどこにも特に文書化されていません。しかし、上記のリンクの同じパッケージの他のクラスを見ることができます。
-
Gradleスクリプトは、Groovy構文のスーパーセットをサポートしています。有効なGroovyはGradleスクリプトでも有効ですが、Gradleスクリプトは必ずしも有効な "default" Groovy ではありません(一般的にはそうです)。
-
メモリ内で操作されているのは実際の抽象構文木なので、同等のGroovyコードの出力を取得する方法はありません。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン