在哪里把Gradleconfiguration(即凭据)不应该提交?

我试图将一个Gradle构build的工件部署到一个Maven仓库,我需要为它指定凭证。 这现在工作正常:

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

但我不喜欢在源代码控制中存储凭据。 使用Maven,我将定义一个服务器configuration,并在~/.m2/settings.xml分配证书。 我如何做与Gradle相似的东西?

〜/ .gradle / gradle.properties

 mavenUser=admin mavenPassword=admin123 

build.gradle

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

第一个答案仍然有效,但API已经改变了。 由于我的编辑没有被接受,我把它作为单独的答案。

authentication()方法仅用于提供身份validation方法(例如Basic),而不提供任何凭据。

你也不应该使用它,因为它是在失败时打印证书!

这他应该看起来像你的build.gradle

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

在您的userhome目录中的gradle.properties中:

 mavenUser=admin mavenPassword=admin123 

还要确保GRADLE_USER_HOME被设置为~/.gradle否则那里的属性文件将不会被parsing。

也可以看看:

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

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

如果你有用户特定的凭据(即每个开发者可能有不同的用户名/密码),那么我会build议使用gradle-properties-plugin 。

  1. 把默认值放在gradle.properties
  2. 每个开发人员重写gradle-local.properties (这应该是git忽略)。

这比重写使用$USER_HOME/.gradle/grade.properties因为不同的项目可能具有相同的属性名称。

你可以把凭证放在一个属性文件中,然后用下面的方法读取它:

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

另一种方法是在操作系统级别定义环境variables并使用以下命令读取它们:

 System.getenv()['YOUR_ENV_VARIABLE'] 

您也可以通过-PmavenUser=user -PmavenPassword=password在命令行上提供variables。

这可能是有用的,你不能使用gradle.properties文件出于某种原因。 例如,在构build服务器上,我们使用Gradle和-g选项,以便每个构build计划都有自己的GRADLE_HOME