2016-12-15 2 views
2

これは私に未知のプロパティのエラーを与える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の観点から、なぜこのように動作するのか理解していません。

答えて

1

私は問題が鶏と卵のことだと思います。

initスクリプトを実行するには、initscriptブロックで宣言した依存関係が必要です。しかし、initスクリプトの実行中にのみ存在するものを使用しようとします。

だから私はあなたが望むものはできないと言っています。 initscriptブロック内外で少なくとも2回宣言する必要があります。

def REPO_URL = 'myRepoUrl' 

initscript { 
    def REPO_URL = 'myRepoUrl' 
    repositories { 
     maven { 
      url REPO_URL 
     } 
    } 
    dependencies { 
     classpath 'some dependency' 
    } 
} 
+0

これは、Gradleが周囲のスコープを実行せずにinitscriptメソッドを何とかコンパイルして実行するということですか?私はGradleとGroovyには比較的新しいし、これが可能であることは知らなかった。 –

+0

Groovyのコンパイルプロセスにフックして、実際に標準コンパイラでコンパイルする前にGroovyスクリプトを変換することができます。この場合の変換の1つは、 'initscript'ブロックが残りのスクリプトの前に抽出され、評価されなければならないことです。スクリプトの残りの部分は、実行するためにそのクラスパスでブロック内で宣言する依存関係が必要です。依存関係がクラスパスにないため、エラーをコンパイルします。私が言ったように、卵と卵。 :-) – Vampire

+0

なぜ私はこのコードを複製したのかを尋ねる同僚の意見を拒否するコメントにリンクしてくれました。 –

1

GRADLE_HOMEまたはPROJECT_HOMEには2つのファイルがあります。 initスクリプトの init.gradleプロパティ

ため

gradle.properties

あなたはあなたができるinit.gradleに続いて

REPO_URL=myRepoUrl 

あなたのparamsを追加することができますgradle.propertiesでそれを使用してください:

repositories { 
     maven { 
      url REPO_URL 
     } 
    } 
+0

gradle.propertiesを$ USER_HOME/.gradleに入れることはできますか? –

+1

はい、gradle.propertiesはproject_homeまたはuser_homeに配置できます – marok