Oracle更改了其Java版本的许可证:
我想Java 7及以下的所有Oracle版本都是OBCL。我不确定该旧许可证下是否有任何Oracle Java 9+版本。
当然,其他Java发行版(OpenJDK等)也具有其他许可证。
正在运行的程序是否可以确定底层JVM / JRE的许可证?动机:当用户在特定许可证的JVM / JRE上使用我的程序时,我想警告他们的程序。
我一直找不到包含这些信息的任何标准系统属性,而且我还查看了构成JRE的JAR清单。
有几个地方提供对Java版本的结构化访问:
IS_JAVA_1_8等前者并没有详细介绍更新号,而后者仅在Java 9+中可用。无论如何,两者仍需要其他资源来将已知的Java版本映射到其各自的许可证。
另外:我知道Oracle最新建议将JRE与一个应用程序捆绑在一起,并且可以通过这种方式避免此问题。
Oracle Java 7和8包含一个文件${java.home}/LICENSE。对于1.7.0_80和1.8.0_152,内容为:
在进行6次HTTP重定向之后,该链接当前指向https://www.oracle.com/downloads/licenses/binary-code-license.html,其中描述了“ Java SE平台产品和JavaFX的Oracle二进制代码许可协议”。
${java.home}/LICENSE 在Oracle Java 1.8.0_221中说:
3次HTTP重定向后,当前链接到https://www.oracle.com/downloads/licenses/javase-license1.html,其中描述了“ Oracle Java SE的Oracle技术网络许可协议”。
Oracle和OpenJDK Java版本9+不提供${java.home}/LICENSE。
所有Java版本都有一个文件${java.home}/release,对于Oracle Java 11如下所示:
BUILD_TYPE="commercial"
IMPLEMENTOR="Oracle Corporation"
...
Run Code Online (Sandbox Code Playgroud)
这适用于Ubuntu的openjdk-11-jre-headless软件包(版本11.0.4 + 11-1ubuntu2〜18.04.3):
IMPLEMENTOR="Ubuntu"
...
Run Code Online (Sandbox Code Playgroud)
BUILD_TYPE对于Ubuntu软件包,没有任何价值。
从java.net下载的其他结果:
jre-8u221-linux-i586.tar.gz:
BUILD_TYPE="commercial"
Run Code Online (Sandbox Code Playgroud)
jdk-9 + 181_linux-x64_ri.zip:
IMPLEMENTOR="N/A"
Run Code Online (Sandbox Code Playgroud)
serverjre-9_linux-x64_bin.tar.gz(java -version说build 9+181):
BUILD_TYPE="commercial"
IMPLEMENTOR="Oracle Corporation"
Run Code Online (Sandbox Code Playgroud)
openjdk-10 + 44_linux-x64_bin_ri.tar.gz:
IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION_DATE="2018-03-20"
Run Code Online (Sandbox Code Playgroud)
jdk-10_linux-x64_bin_ri.tar.gz(java -version说build 10+44):
IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION_DATE="2018-03-20"
Run Code Online (Sandbox Code Playgroud)
openjdk-11 + 28_linux-x64_bin.tar.gz:
IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION_DATE="2018-09-25"
Run Code Online (Sandbox Code Playgroud)
jdk-11.0.4_linux-x64_bin.tar.gz:
BUILD_TYPE="commercial"
IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION_DATE="2019-07-16"
Run Code Online (Sandbox Code Playgroud)
openjdk-12.0.2_linux-x64_bin.tar.gz:
IMPLEMENTOR="Oracle Corporation"
JAVA_VERSION_DATE="2019-07-16"
Run Code Online (Sandbox Code Playgroud)
通过oracle-java7-installer和oracle-java8-installer软件包在Ubuntu上安装的Oracle Java 7和8还提供了${java.home}/release,其中包括:
BUILD_TYPE="commercial"
Run Code Online (Sandbox Code Playgroud)
Java 9+发行版包含一个${java.home}/legal目录。检查${java.home}/legal/java.base/LICENSE:
legal/*/LICENSE相同)legal/*/LICENSE相同)Ubuntu的openjdk-11-jre-headless 11.0.4 + 11-1ubuntu2〜18.04.3提供了no ${java.home}/legal/*/LICENSE。
奇怪的是,它看起来像“ https://java.com/ bc_l icense” ${java.home}/LICENSE很好地表明了OTN许可的JRE。我想对于Oracle在2019年3月16日之后发布的版本,URL LICENSE从“ http://java.com/license ” 更改为“ https://java.com/ bc_l icense” 是一个错误;他们应该将其更改为“ https://java.com/ otn许可证”。他们的补救措施是使https://java.com/bc_license重定向到OTN文档。
一个强烈的暗示是何时${java.home}/legal/java.base/LICENSE包含“请参考https://java.com/otnlicense ”。
一个较弱的提示是:
IMPLEMENTOR="Oracle Corporation",BUILD_TYPE="commercial"和JAVA_VERSION_DATE="2019-04-16" 或更高版本。欢迎提供更可靠的答案!