gpt4 book ai didi

java - 我可以假设 JDK/JRE 会有一个 `release` 文件吗?

转载 作者:行者123 更新时间:2023-12-05 05:42:57 24 4
gpt4 key购买 nike

我正在尝试推断已安装的 JDK/JRE 的 Java 版本。我看到很多运行 java -version 的代码并解析输出,但这有点昂贵且写起来很烦人。此外,java -version 的输出不包括操作系统和体系结构等重要信息(如今对于支持多种体系结构的 M1 Mac 尤其重要)。

我注意到在我安装的所有 JDK 中,都有一个 release带有 JAVA_VERSION="<VERSION>" 行的文件.

例如,Amazon Corretto 8 有一个 release文件说

cat release
JAVA_VERSION="1.8.0_322"
OS_NAME="Windows"
OS_VERSION="5.1"
OS_ARCH="i586"
SOURCE=""
LIBC=""

祖鲁 17 说

IMPLEMENTOR="Azul Systems, Inc."
IMPLEMENTOR_VERSION="Zulu17.32+13-CA"
JAVA_VERSION="17.0.2"
JAVA_VERSION_DATE="2022-01-18"
LIBC="default"
MODULES="java.base java.compiler java.datatransfer java.xml java.prefs java.desktop java.instrument java.logging java.management java.security.sasl java.naming java.rmi java.management.rmi java.net.http java.scripting java.security.jgss java.transaction.xa java.sql java.sql.rowset java.xml.crypto java.se java.smartcardio jdk.accessibility jdk.internal.jvmstat jdk.attach jdk.charsets jdk.compiler jdk.crypto.ec jdk.crypto.cryptoki jdk.dynalink jdk.internal.ed jdk.editpad jdk.hotspot.agent jdk.httpserver jdk.incubator.foreign jdk.incubator.vector jdk.internal.le jdk.internal.opt jdk.internal.vm.ci jdk.internal.vm.compiler jdk.internal.vm.compiler.management jdk.jartool jdk.javadoc jdk.jcmd jdk.management jdk.management.agent jdk.jconsole jdk.jdeps jdk.jdwp.agent jdk.jdi jdk.jfr jdk.jlink jdk.jpackage jdk.jshell jdk.jsobject jdk.jstatd jdk.localedata jdk.management.jfr jdk.naming.dns jdk.naming.rmi jdk.net jdk.nio.mapmode jdk.random jdk.sctp jdk.security.auth jdk.security.jgss jdk.unsupported jdk.unsupported.desktop jdk.xml.dom jdk.zipfs"
OS_ARCH="x86_64"
OS_NAME="Darwin"
SOURCE=".:git:bfa6b2cbcbf7"

我找不到 JEP 或任何其他说明此文件将始终存在的文档,但也找不到反例。 (我也找不到关于 `java -version 输出格式的 JEP 或文档)

假设总是有一个 release 是否安全?至少包含 JAVA_VERSION 的文件行?

最佳答案

Can I assume that a JDK/JRE will have a "release" file?

你可以假设任何你喜欢的。我们无法阻止你:-)

然而……

如果没有正式公开记录“发布”文件存在,则假定它存在是不安全的。而且我不记得看到任何提到“发布”文件的文档。

(OpenJDK 源代码树中的文档/构建说明不算在内。那是“内部的”,如有更改,恕不另行通知。)

这并不是说该文件未出现在所有 Java 版本中……或者它可能将来会发生变化。但安全 意味着您可以信赖它。如果没有记录,您就不能依赖它。

相比之下,虽然也未指定 java -version 的输出,但至少记录了该选项。典型的输出至少在 Oracle 网站上显示:

Determining the Default Version of the JDK on Mac

When launching a Java application through the command line, the system uses the default JDK. It is possible for the version of the JRE to be different than the version of the JDK.

You can determine which version of the JDK is the default by typing java -version in a Terminal window. If the installed version is 7u55, you will see a string that includes the text 1.7.0_55. For example:

java -version
java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.55-b03, mixed mode)

来源:https://www.java.com/en/download/help/version_manual.html


"What is the safest way to detect Java version, Distributor, OS, and Architecture given a JDK"?

这是一个见仁见智的问题...但我的意见是您应该编写一个小型实用程序来从系统属性对象中读取信息...使用(仅)在 javadoc 中明确记录的属性.

关于java - 我可以假设 JDK/JRE 会有一个 `release` 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71917744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com