在构建时为uploadArchives提供gradle凭据

时间:2013-10-23 16:25:22

标签: maven gradle artifactory

我有一个包含多个子项目的gradle项目 - 所有这些项目我希望能够立即发布到本地工件库。使用uploadArchives可以非常愉快地管理它。但是,上传需要我不希望存储在任何地方的凭据。我已经找到了几种通过设置额外属性作为根项目的一部分并在子项目中进行选择来实现这一目标的方法,但感觉正确的方法是这样做:

task getAuth << {
    ext {
        username = getUsername()
        password = getPassword()
    }
}

uploadArchives.dependsOn(getAuth)

但是,uploadArchives似乎在它的依赖之前运行,因此在设置用户名或密码并且脚本错误输出之前设置auth。这对我来说似乎是一种非常意想不到的行为。

3 个答案:

答案 0 :(得分:0)

我个人会在任务操作(uploadArchives.doFirst { ... })中设置用户名和密码,但配置任务也应该有效。如果没有,那么构建脚本的其余部分可能出现问题。请注意,您要设置额外的属性getAuth.usernamegetAuth.password,而不是project.usernameproject.password

答案 1 :(得分:0)

事实证明我的问题有点不对劲。我错误地认为为maven添加发布repos的闭包将在任务时运行。但是:

uploadArchives {
    addSomeRepos()
}

正在配置uploadArchives任务,因此在buildcript中找到它时运行。因此,在任务中设置用户名和密码,这将在buildscript之后运行,这意味着它们在安装时为空。

我通过将getAuth任务更改为createPublishTargets任务来修复此问题,该任务在任务中执行uploadArchives任务的配置。这非常有效。

task createPublishTarget << {
  ext {
    username = System.console().readLine("\nusername: ")
    password = System.console().readPassword("password: ").toString()
  }

  allprojects {
    uploadArchives {
      repositories {
        mavenDeployer {
          repository(url: "my-artifactory") {
            authentication(userName: createPublishTarget.username, password: createPublishTarget.password)
          }
        }
      }
    }
  }
}

虽然我确实遇到了一个有趣的问题authentication(//blah)配置了一个与我预期不同的对象,所以你必须从任务中明确地获取设置属性。

答案 2 :(得分:0)

我建议将凭据放入$HOME/.gradle/gradle.properties,或者可能正在创建一个包含存储库定义的$HOME/.gradle/init.gradle脚本。