Для контекста, моей конечной целью здесь является внедрение учетных данных 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 вокруг этих замыканий?