これは私に未知のプロパティのエラーを与えるinit.gradle?
Gradleのinitスクリプトブロックプロパティ
def REPO_URL = 'myRepoUrl'
initscript {
repositories {
maven {
url REPO_URL
}
}
dependencies {
classpath 'some dependency'
}
}
内のカスタムinitscript
ブロックにおける外部プロパティを再利用する方法はあります。私もext {}を使って試してみました。
ext {
REPO_URL = 'myRepoUrl'
}
同じエラーです。それでも、それはinit.gradle
の中でさえもこれまでに試した他のすべての設定ブロックで動作します。これによりブロックinitscript
と残りの構成のプロパティが重複します。
もう少し調べてみると、周囲の範囲への参照が完全に失われているようです。私はGroovyの観点から、なぜこのように動作するのか理解していません。
これは、Gradleが周囲のスコープを実行せずにinitscriptメソッドを何とかコンパイルして実行するということですか?私はGradleとGroovyには比較的新しいし、これが可能であることは知らなかった。 –
Groovyのコンパイルプロセスにフックして、実際に標準コンパイラでコンパイルする前にGroovyスクリプトを変換することができます。この場合の変換の1つは、 'initscript'ブロックが残りのスクリプトの前に抽出され、評価されなければならないことです。スクリプトの残りの部分は、実行するためにそのクラスパスでブロック内で宣言する依存関係が必要です。依存関係がクラスパスにないため、エラーをコンパイルします。私が言ったように、卵と卵。 :-) – Vampire
なぜ私はこのコードを複製したのかを尋ねる同僚の意見を拒否するコメントにリンクしてくれました。 –