我从gradle文件中调用这样的主类,当我尝试使用System.console读取密码时,我得到了一个NPE。
task (getRepositoryInfo, dependsOn: 'classes', type: JavaExec) {
standardInput = System.in
standardOutput = System.out
environment('TERM', 'dumb')
main = 'com.devpt.explorer.Demo'
mainClassName = 'com.devpt.explorer.Demo'
classpath = sourceSets.main.runtimeClasspath
def stageName = project.hasProperty("STAGE_NAME")? project.getProperty("STAGE_NAME"): "stageXXXX"
def operations = project.hasProperty("OPERATIONS")? project.getProperty("OPERATIONS"): "ALL"
def buildId = project.hasProperty("BUILD_ID")? project.getProperty("BUILD_ID"): "DUMMY"
args operations
args stageName
args buildId
}
System.console在java主类中为null。但我可以直接从gradle文件中读取密码。 我做错了什么?
代码示例:https://github.com/ajayboseac/GradleExample
gradle 2.2版 java版本:1.7.0_13
答案 0 :(得分:1)
我已经在gradle中发布了这个问题并得到了一个确认控制台应该为空的确认
link:https://discuss.gradle.org/t/system-console-null-in-a-gradle-java-task/9274
引用答案:
分叉的进程没有连接到控制台。这是唯一可能的 通过在Java 7中使用JDK流程构建器API来实现。这里是一个 我在快速搜索后找到了关于该主题的文章: http://tamanmohamed.blogspot.com.au/2012/06/jdk7-processbuilder-and-how-redirecting.html2
Gradle还没有支持分叉进程的继承流 它的JavaExec和Exec任务。