22

java -version去的结果有什么特别的原因stderr吗?

例如,此命令从 Windows 的提示行执行:

java -version > java_version.txt

将文件java_version.txt留空。

java.exe编辑:在没有任何参数的情况下执行后打印出的帮助也会发生同样的情况。

编辑:纯粹出于好奇,我检查了它是否一直都是这样,结果发现它确实如此。java -version转到stderrJDK 1.1.8 和 JDK 1.2.2 中,但是java.exe没有任何参数的输出不会。

4

2 回答 2

25

java -version 进入 stderr 的结果有什么特殊原因吗?

AFAIK,没有特殊原因。这就是java命令的执行方式。可能一直追溯到 Java 1.0,尽管很难验证这一点。

我的简短调查表明,这种行为与大多数 Linux 命令的行为方式不一致……我尝试过的所有其他操作都使用标准输出来获取版本信息。(毕竟版本信息不是“错误”输出。)

但是请注意--version/-version选项是一种约定,而不是任何正式标准所要求的。(GNU 编码标准规定命令应该实现--version并且版本信息应该写入标准输出。但是 POSIX 标准没有提及这一点,LSB 标准也没有提及。)


你能/应该做什么?

  • 在您的 shell 脚本或批处理文件中捕获 stderr 而不是 stdout 应该很容易。
  • 这样做应该没有任何风险。Oracle 无法在-version不破坏客户脚本的情况下更改 Java 工具链以将输出发送到标准输出。这是极不可能的1

1 - 这是多么不可能的证据:https ://bugs.java.com/bugdatabase/view_bug.do?bug_id=4380614 。请注意“解决方案:无法修复”......和最后的评论。

于 2012-11-20T22:46:35.477 回答
3

此问题的解决方法是:

java -version 2> java_version.txt
于 2012-11-20T22:43:48.700 回答