Переменная Gradle в buildscript является нулевой для учетных данных хранилища Maven - PullRequest
0 голосов
/ 06 февраля 2019

Для контекста, моей конечной целью здесь является внедрение учетных данных Maven, используемых для плагинов buildscript, через переменные среды или с помощью Maven settings.xml.

Я создал это закрытие buildscript для получения кредитов:

buildscript {
  ext.nexusCreds = {
    def id = "releases"
    def username = System.getenv("NEXUS_USER")
    def password = System.getenv("NEXUS_PASSWORD")

    if (!(username && password && username.trim() && password.trim())) {
      File mavenSettings = new File("${System.properties['user.home']}/.m2/settings.xml")
      if (mavenSettings.exists()) {
        def xmlSlurper = new XmlSlurper()
        def settings = xmlSlurper.parse(mavenSettings)
        username = settings.servers.children().find { it.id == id }.username
        password = settings.servers.children().find { it.id == id }.password
      }
    }

    println("Username: $username")
    println("Password: $password")
    [username: username, password: password]
  }()
  repositories {
    mavenLocal()
    maven {
      url "http://nexus.ourStagingEnv.com/content/repositories/releases/"
      credentials {
        username nexusCreds.username
        password nexusCreds.password
      }
    }
    jcenter()
    mavenCentral()
  }
  dependencies {
    classpath group: 'com.myPlugin', name: 'myPlugin', version: '1.0.0'
  }
}

Проблема в том, что когда сборка достигает пользовательского закрытия "maven", кажется, что "username" имеет значение null:

A problem occurred evaluating root project 'myProject'.
> Could not find method username() for arguments [deployment] on Credentials [username: null] of type org.gradle.internal.credentials.DefaultPasswordCredentials_Decorated.

Обратите внимание, что "username" и "password"Обе переменные печатаются как ненулевые в замыкании «nexusCreds» (они установлены в моем файле settings.xml).

Вот странная часть: если я жестко закодирую эти значения в замыкании «nexusCreds», всеотлично работает.

ext.nexusCreds = {
    def id = "releases"
    def username = System.getenv("NEXUS_USER")
    def password = System.getenv("NEXUS_PASSWORD")

    if (!(username && password && username.trim() && password.trim())) {
      File mavenSettings = new File("${System.properties['user.home']}/.m2/settings.xml")
      if (mavenSettings.exists()) {
        def xmlSlurper = new XmlSlurper()
        def settings = xmlSlurper.parse(mavenSettings)
        username = settings.servers.children().find { it.id == id }.username
        password = settings.servers.children().find { it.id == id }.password
      }
    }

    username = "myUsername"
    password = "myPassword"
    println("Username: $username")
    println("Password: $password")
    [username: username, password: password]
  }()

Почему первый блок кода не работает, но работает жесткое кодирование?Есть ли что-то, что я здесь упускаю из-за поведения Groovy или Gradle вокруг этих замыканий?

1 Ответ

0 голосов
/ 06 февраля 2019

D'о.Нашел проблему.Это оказалось проблемой в моем анализе settings.xml.имя пользователя и пароль были узлами XML, а не строками.Исправление было:

username = settings.servers.children().find { it.id == id }.username.toString()
password = settings.servers.children().find { it.id == id }.password.toString()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...