2012-10-05 17 views
96

我試圖將一個Gradle構建的工件部署到Maven repo,並且我需要爲其指定憑據。這工作正常現在:哪裏可以放置不應該提交的Gradle配置(即憑據)?

uploadArchives { 
    repositories { 
     mavenDeployer { 
      repository(url: "http://.../nexus/content/repositories/snapshots/") { 
       authentication(userName: "admin", password: "admin123") 
      } 
     } 
    } 
} 

但我不喜歡必須將憑據存儲在源代碼管理。使用Maven,我會定義一個服務器配置,並在我的~/.m2/settings.xml中分配憑證。我如何做與Gradle類似的事情?

+0

我寫了一篇關於這個希望很短的博客文章可以幫助http://www.rationaljava.com /2016/02/how-to-set-up-repository-authentication.html – Dan

回答

156

〜/ .gradle/gradle.properties

mavenUser=admin 
mavenPassword=admin123 

的build.gradle

... 
authentication(userName: mavenUser, password: mavenPassword) 
+0

不應將'gradle.properties'簽入到'VCS'中? – theblang

+10

不是Gradle用戶主頁中的人(參見上面的路徑)。 –

+0

對於gradles的一些版本... 使用mavenPass代替mavenPassword – Rodrigo

5

你可以把證書在屬性文件中,並使用這樣的閱讀:

Properties props = new Properties() 
props.load(new FileInputStream("yourPath/credentials.properties")) 
project.setProperty('props', props) 

另一種方法是在操作系統級別定義的環境變量和使用閱讀:

System.getenv()['YOUR_ENV_VARIABLE'] 
5

您也可以在命令行上-PmavenUser=user -PmavenPassword=password供應變量。

這可能很有用,因爲某些原因您不能使用gradle.properties文件。例如。在構建服務器上,我們使用Gradle和-g選項,以便每個構建計劃都有自己的GRADLE_HOME

11

如果您有用戶特定的憑據(即每個開發人員可能有不同的用戶名/密碼),那麼我會建議使用gradle-properties-plugin。在gradle.properties

    1. 認沽默認每個開發人員gradle-local.properties覆蓋(這應該是的Git忽略不計)。

    這比覆蓋使用$USER_HOME/.gradle/grade.properties更好,因爲不同的項目可能具有相同的屬性名稱。

  • 33

    第一個答案仍然有效,但API已經改變了。由於我的編輯沒有被接受,我把它作爲單獨的答案發布。

    方法authentication()僅用於提供身份驗證方法(例如Basic)但不提供任何憑據。

    您也不應該使用它,因爲它打印失敗時的憑據!

    這他應該怎麼看起來像你的build.gradle

    maven { 
         credentials { 
          username "$mavenUser" 
          password "$mavenPassword" 
         } 
         url 'https://maven.yourcorp.net/' 
        } 
    

    在您USERHOME DIR gradle.properties地說:

    mavenUser=admin 
    mavenPassword=admin123 
    

    還要確保GRADLE_USER_HOME設置爲~/.gradle否則屬性文件存在將不會被解決。

    參見:

    https://docs.gradle.org/current/userguide/build_environment.html

    https://docs.gradle.org/current/userguide/dependency_management.html(23.6.4.1)

    +0

    您能否闡明OP如何使用?即它位於命名空間的位置uploadArchives { 存儲庫{ mavenDeployer { –

    +0

    對不起,但我沒有得到您的問題 – questionare

    +3

    OP使用名稱空間uploadArchives>存儲庫> mavenDeployer>存儲庫>身份驗證內的身份驗證。他們仍然想使用我假設的uploadArchives,那麼OP的構建配置如何應用您的解決方案?他們是否需要刪除身份驗證,它會起作用? –