当前位置: 首页 > 面试题库 >

为什么“ java -version”进入stderr?

锺离良哲
2023-03-14
问题内容

java -version前往结果是否有任何特殊原因stderr

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

java -version > java_version.txt

将文件java_version.txt留空。

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

编辑:出于好奇,我检查了它是否一直都是这样,事实证明它确实存在。在JDK 1.1.8和JDK 1.2.2中java -version都转到stderr,但是java.exe不带任何参数的输出不会。


问题答案:

java -version的结果进入stderr是否有任何特殊原因?

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

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

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

您可以/应该做什么?

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

1-这是一种不太可能的证据:https
:
//bugs.java.com/bugdatabase/view_bug.do?bug_id=4380614。请注意“解决方案:无法修复”
…和最终注释。



 类似资料:
  • 问题内容: 我是Maven和MacOS的新手。 我在终端中安装了maven,在获取版本设置(使用)时,它似乎使用了JDK 1.6,而我安装了JDK 1.7。有什么问题吗? 我输入的命令如下: 10:15:32+0800) Maven home: /usr/local/Cellar/maven/3.1.0/libexec Java version: 1.6.0_51, vendor: Apple I

  • 如标题所示,基本上为什么java-version在我的命令提示符中与where java不一致?

  • 我们强调渐进式的改善站点体验主要有下面两个原因: 降低站点改造的代价,逐步支持各项新技术,不要一蹴而就 新技术标准的支持度还不完全,新技术的标准还未完全确定 PWA 改造的成本考虑 PWA 涉及到从安全、性能和体验等方面的优化,想要一次性支持所有特性,代价很高,老板也不一定愿意投入大量人力来支持这项大工程。 所以,从改造的成本考虑,我们也建议采取渐进式的方式,可以考虑按照下面的步骤来改造: 第一步

  • 问题内容: 是否有任何特殊原因为什么不包括这种文字,而允许使用十六进制和八进制格式? 问题答案: Java 7包括它。检查新功能。 例:

  • 问题内容: 我在Hibernate 3.6.x中使用JPA2 我对@Version进行了简单测试。 假设我们有2个实体, 实体团队具有玩家实体列表,双向关系,惰性获取类型,级联类型全部 两个实体都有@Version 这是场景: 每当对团队/球员实体之一进行修改时,刷新/提交时,团队/球员的版本就会增加(修改后的记录的版本会增加)。 使用persist将新的球员实体添加到团队的集合中,将在persi

  • 问题内容: 我正在读一本关于数据结构的书。目前,我正在使用图形,下​​面的代码用于图形的顶点部分。 当我尝试实现此equals方法时,我的编译器抱怨没有检查参数的类型,而只是允许向其发送任何对象。对于我来说,为什么该参数不应该是“顶点”而不是“对象”,这似乎也让我有些奇怪。作者这样做是有原因的吗,还是这个错误或过时的例子? 问题答案: