2015-05-19 95 views
4

我正在使用maven-publish插件將工件發佈到nexus存儲庫。我不想將我的nexus存儲庫的實際憑據放在我的build.gradle文件中。所以我決定用項目的屬性,如下面所示爲什麼gradle在丟失項目屬性時拋出錯誤

credentials { 
      username "$nexus_username" 
      password "$nexus_password" 
} 

現在我可以用gradle publish -Pnexus_username=<myusername> -Pnexus_password=<mypass>我的神器發佈到我的Nexus倉庫。但是繼續爲正常的Gradle構建傳遞這個項目屬性沒有任何意義。如果我不通過gradle是拋出一個錯誤說Could not find property 'nexus_username'任何人都知道一個更好的方法來解決這個問題。

回答

4

經過一番挖掘

if(! hasProperty("nexus_username")){ 
    ext.nexus_username="" 
} 
if(! hasProperty("nexus_password")){ 
    ext.nexus_password="" 
} 

這裏我在做什麼是創建一個空白的用戶名和密碼,如果該項目屬性不可用,找到了解決辦法。但我仍然認爲這是一種解決方法,而不是正確的解決方案。如果有人找到更優雅的解決方案,請做出迴應。

0

我一直在我的特定用戶搖籃性能我的憑據,所以只有我的用戶帳戶有權訪問的價值觀,我可以在搖籃計劃離開虛擬(或未定義)值。這樣,如果我將項目分發給其他人或將項目提交給源代碼控制,則沒有人獲得我的個人憑證或設置。

正如Gradle User Guide: The Build Environment解釋,你用戶特定屬性將覆蓋項目的本地gradle.properties設置文件,其中的屬性名稱匹配的屬性。在命令行上使用-P輸入的值仍將優先於以前的兩個源。

特定於用戶的文件被命名爲gradle.properties,位於由GRADLE_USER_HOME環境變量(如果設置)指定的路徑,默認爲:

  • 的Linux/OS X:~/.gradle/gradle.properties
  • 的Windows: %USERPROFILE%\.gradle\gradle.properties

然後,您可以使用hasProperty方法在構建腳本,或通過編輯(或創建)定義默認值個項目的gradle.properties文件(在同一水平作爲的build.gradle文件):

# Do not put real credentials here! 
# Instead, copy to ~/.gradle/gradle.properties and set the values there. 
nexus_username = 
nexus_password = 

主要告誡這種做法是,你的用戶特定的屬性文件只能提供單一的給定屬性名稱的值。如果您有多個使用相同屬性名稱但需要不同值的項目,則可能會出現問題。此外,該文件是純文本,所以它可能不是密碼的最佳位置,除非您願意冒這個風險。