java -version 没有写入标准输出?

java -version 没有写入标准输出?

要么是我在做傻事,要么是 Sun 在做傻事。为什么会出现这样的情况:

java -version > version.txt

仍然打印到 stdout 并且 version.txt 为空?我检查了退出代码,它仍然是 0,所以这不是写入 stderr。

我需要这个,因为我正在构建一个测试环境工具,并且想要检查 Java 版本是否足够,我本来打算捕获该版本的输出,但现在我被卡住了。

我在使用 OS X Leopard,Java 版本 1.6.0_20。

有任何想法吗?

答案1

java -version &> version.txt

退出代码与其输出的位置无关。

答案2

这现在是一种特色。;-)

一份古老的错误报告

在修复这个错误之前,我们应该非常非常仔细地考虑。将版本信息打印到 stderr 显然是错误的,但由于我们从一开始就这样做,如果我们现在改变它,我们很可能会破坏基于 Java 构建的现有系统。如果我们决定改变这一点,那么必须等到 Tiger 发布,以便进行充分的测试。

答案3

作为对 Ignacio 答案的补充:

解析输出java -version相当复杂且容易出错(并且不能保证输出始终具有相同的格式,尤其是对于非 Sun JVM)。

要检查 Java 版本,您可以运行一个小型 Java 程序来检查相应的系统属性:请参阅 Javadocs获取属性()。这是获取有关 Java 环境信息的官方、有据可查的方法。您可能想检查一下:

  • java.version(Java 安装的确切版本号,例如 1.6.0_15 )
  • java.specification.version(Java 平台版本,例如 1.5 或 1.6)

相关内容