Установка systemProperty в gradle.taskGraph.whenReady
Я пытаюсь прочитать имя пользователя и пароль, необходимые для входа в мое приложение и присвоить его системному свойству. Я могу читать значения, используя System.console().readLine
но я не могу присвоить его системному свойству. Значения свойства всегда равны нулю, я знаю, что это значение равно нулю System.console().println
на двух свойствах.
Причина я использую gradle.taskGraph.whenReady
потому что я не хочу, чтобы пароль запрашивался для каждой задачи, а только при запуске задачи, предназначенной для Live.
Ниже мой мой код
def user_login =""
def pass_login =""
gradle.taskGraph.whenReady { taskGraph ->
user_login = System.console().readLine("\nPlease enter username: ")
pass_login = System.console().readPassword("\nPlease enter password: ")
test {
systemProperty "username", new String(user_login)
systemProperty "password", new String(pass_login)
}
}
Я пробовал без test{...}
но это дает следующее сообщение об ошибке:
Could not find method systemProperty() for arguments [username,] on root project
Я много искал в Google, но не нашел ответа на этот вопрос, любая помощь по этому вопросу очень ценится.
Спасибо.
2 ответа
Вы могли бы просто позвонить System.setProperty()
Я не думаю, что существует метод, называемый systemProperty
либо на заводной, либо на gradle
Изменить: Ваше приложение и скрипт Gradle не работают в одном экземпляре JVM. Это означает, что системные свойства, установленные в скрипте gradle, не передаются приложению. Вам нужно будет найти другой способ получить имя пользователя и пароль в вашем приложении.
Из того, что я вижу в последних документах Gradle, Test имеет systemProperties
свойство, которое принимает Map
, Здесь нет systemProperty
, Итак, я считаю, что вы хотите следующее (не проверено... см. № 2 ниже):
def user_login =""
def pass_login =""
gradle.taskGraph.whenReady { taskGraph ->
user_login = System.console().readLine("\nPlease enter username: ")
pass_login = System.console().readPassword("\nPlease enter password: ")
test {
systemProperties "username": user_login, "password": pass_login
}
}
Я также хотел добавить, что я вижу несколько проблем с вашим подходом, которые вы, возможно, захотите пересмотреть.
- gradle - это инструмент / платформа для сборки, и сборки предназначены для минимального вмешательства человека. Разве это не должно быть автоматизировано? Ввод вашего имени пользователя и пароля будет очень утомительным, очень быстро. Я считаю, что вы должны рассмотреть возможность использования свойств gradle. Таким образом, пользователь сборки устанавливает свое имя пользователя и пароль для своего пользователя.
gradle.properties
файл. Это дает дополнительное преимущество, так как доступно для нескольких сборок без необходимости когда-либо запрашивать пользователя. - Почему это происходит в
taskGraph
закрытие? Как это зависит отtaskGraph
настраивается? Как другие задачи в вашей сборке будут использовать это? Я не верю, что ваш код будет работать.test
Задача, предоставляемая тем плагином, который вы используете, уже была настроена ко времениtaskGraph
готов. Googlegradle configuration vs execution
чтобы получить много обсуждений по теме, или используйте этот пример.
Рассмотрите возможность использования:
/**
* ~/.gradle/gradle.properties
*/
userName = me
userPassword = YouWillNeverKnow
/**
* build.gradle
*/
apply plugin: 'java'
test {
// use safe navigation to avoid missing property exception
systemProperties "username": project?.userName, "password": project?.userPassword
}
}
Я проверил вышеупомянутое, используя мое тестирование спока для моего отличного проекта, и это сработало.