2016-12-15 96 views
2

有沒有辦法重用裏面init.gradle?搖籃啓動腳本塊屬性

def REPO_URL = 'myRepoUrl' 

initscript { 
    repositories { 
     maven { 
      url REPO_URL 
     } 
    } 
    dependencies { 
     classpath 'some dependency' 
    } 
} 

這給了我未知屬性錯誤定製initscript塊外部屬性。我也嘗試過使用外部{}像這樣

ext { 
    REPO_URL = 'myRepoUrl' 
} 

與相同的錯誤。然而,它在所有其他配置塊中都可以工作,即使在init.gradle之內也是如此。這迫使我複製initscript塊的屬性和其餘配置。

經過多一點檢查後,它看起來完全失去了對周圍範圍的任何引用。我甚至不明白爲什麼從Groovy的角度來看它的行爲方式。

回答

1

我認爲這個問題是一個雞與蛋的事情。

要執行init腳本,您需要在initscript塊中聲明的依賴關係。但是,您嘗試使用僅在執行初始化腳本期間存在的內容。

所以我會說你想要的是不可能的。您必須在initscript區塊內外聲明至少兩次。所以,你可以得到可能是最好的是:

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腳本。在這種情況下,其中一種轉換應該是在腳本的其餘部分之前提取並評估'initscript'塊,因爲腳本的其餘部分需要在該塊的類路徑中聲明的相關性以執行,否則您將獲得編譯錯誤,因爲依賴關係不在類路徑中。正如我所說,雞蛋和雞蛋。 :-) – Vampire

+0

爲了防止同事問我爲什麼要複製這段代碼,請鏈接到評論中。 –

1

在你GRADLE_HOME或PROJECT_HOME你可以有2個文件。

gradle.properties房產

init.gradle用於初始化腳本

在gradle.properties您可以添加PARAMS

REPO_URL=myRepoUrl 

然後在init.gradle可以使用它:

repositories { 
     maven { 
      url REPO_URL 
     } 
    } 
+0

gradle.properties可以進入$ USER_HOME/.gradle嗎? –

+1

是的,gradle.properties可以放在project_home或user_home – marok