我正在尝试读取登录我的应用程序所需的用户名和密码,并将其分配给系统属性。我能够使用System.console().readLine
读取值,但我无法将其分配给系统属性。属性值总是为null,我知道它为null,因为我在两个属性上做了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上搜索了很多但是没有找到这个问题的答案,对此非常感谢。
谢谢。
答案 0 :(得分:1)
您可以致电System.setProperty()
我不认为在groovy或gradle上存在一个名为systemProperty
的方法
编辑: 您的应用程序和gradle脚本不在同一JVM实例中运行。这意味着在gradle脚本中设置的系统属性不会传递给应用程序。您需要找到另一种方法来获取应用程序中的用户名和密码。
答案 1 :(得分:0)
根据我在最新的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.properties
文件中设置用户名和密码。这具有额外的好处,可以在不需要提示用户的情况下用于多个构建。taskGraph
关闭时发生这种情况?这取决于taskGraph
正在设置?构建中的其他任务如何使用此功能?我不相信你的代码会起作用。 test
任务由您使用的任何插件提供,已在taskGraph
准备就绪时配置。 Google gradle configuration vs execution
可以就此主题进行大量讨论,或使用此example。考虑使用:
/**
* ~/.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
}
}
我测试了上面的内容,使用我的spock单元测试我的groovy项目并且它有效。