草庐IT

java - 有没有办法查询 JVM/JRE 的许可证?

coder 2024-03-31 原文

Oracle 更改了其 Java 版本的许可证:

  • 8u201/8u202 及更早版本:Oracle 二进制代码许可 (OBCL) 协议(protocol)
  • 8u211/8u212 及更高版本:Oracle 技术网 (OTN) 许可协议(protocol)

  • 我想 Java 7 及以下的所有 Oracle 版本都是 OBCL;我不确定该旧许可下是否有任何 Oracle Java 9+ 版本。

    当然,其他 Java 发行版(OpenJDK 等)还有其他许可证。

    有没有办法让正在运行的程序确定底层 JVM/JRE 的许可证?动机:当用户在特定许可证的 JVM/JRE 上使用我的程序时,我想警告他们。

    我一直无法找到包含此信息的任何标准系统属性,而且我还查看了构成 JRE 的 JAR 的 list 。

    有几个地方可以提供对 Java 版本的结构化访问:
  • https://commons.apache.org/proper/commons-lang/javadocs/api-3.9/org/apache/commons/lang3/SystemUtils.htmlIS_JAVA_1_8
  • https://commons.apache.org/proper/commons-lang/javadocs/api-3.9/org/apache/commons/lang3/JavaVersion.html
  • https://docs.oracle.com/javase/9/docs/api/java/lang/Runtime.Version.html

  • 前者没有深入到更新编号的细节,后者仅在 Java 9+ 中可用。无论如何,两者仍然需要一些其他资源来将已知的 Java 版本映射到各自的许可证。

    另外:我知道 Oracle 关于将 JRE 与应用程序捆绑在一起的最新建议,并且可以通过这种方式避免此问题。

    最佳答案

    ${java.home}/许可证

    Oracle Java 7 和 8 包含一个文件 ${java.home}/LICENSE .对于 1.7.0_80 和 1.8.0_152,内容为:

    Please refer to http://java.com/license



    经过 6 次 HTTP 重定向后,当前指向 https://www.oracle.com/downloads/licenses/binary-code-license.html ,其中描述了“ Oracle 二进制代码许可 Java SE 平台产品和 JavaFX 协议(protocol)”。
    ${java.home}/LICENSE在 Oracle Java 1.8.0_221 中说:

    Please refer to https://java.com/bc_license



    经过 3 次 HTTP 重定向后,当前指向 https://www.oracle.com/downloads/licenses/javase-license1.html ,其中描述了“ Oracle 技术网许可 Oracle Java SE 协议(protocol)”。
    ${java.home}/LICENSE在 Oracle Java 1.8.0_251 中说:

    Please refer to https://java.com/otnlicense



    Oracle 和 OpenJDK Java 版本 9+ 不提供 ${java.home}/LICENSE .

    ${java.home}/release

    所有 Java 版本都有一个文件 ${java.home}/release ,对于 Oracle Java 11 看起来像这样:
    BUILD_TYPE="commercial"
    IMPLEMENTOR="Oracle Corporation"
    ...
    

    这适用于 Ubuntu 的 openjdk-11-jre-headless 包(版本 11.0.4+11-1ubuntu2~18.04.3):
    IMPLEMENTOR="Ubuntu"
    ...
    

    没有BUILD_TYPE在 Ubuntu 包的情况下的值(value)。

    从 java.net 下载的其他结果:

    jre-8u221-linux-i586.tar.gz 和 jdk-8u251-linux-i586.tar.gz :
    BUILD_TYPE="commercial"
    

    jdk-9+181_linux-x64_ri.zip:
    IMPLEMENTOR="N/A"
    

    serverjre-9_linux-x64_bin.tar.gz( java -versionbuild 9+181 ):
    BUILD_TYPE="commercial"
    IMPLEMENTOR="Oracle Corporation"
    

    openjdk-10+44_linux-x64_bin_ri.tar.gz:
    IMPLEMENTOR="Oracle Corporation"
    JAVA_VERSION_DATE="2018-03-20"
    

    jdk-10_linux-x64_bin_ri.tar.gz( java -versionbuild 10+44):
    IMPLEMENTOR="Oracle Corporation"
    JAVA_VERSION_DATE="2018-03-20"
    

    openjdk-11+28_linux-x64_bin.tar.gz:
    IMPLEMENTOR="Oracle Corporation"
    JAVA_VERSION_DATE="2018-09-25"
    

    jdk-11.0.4_linux-x64_bin.tar.gz:
    BUILD_TYPE="commercial"
    IMPLEMENTOR="Oracle Corporation"
    JAVA_VERSION_DATE="2019-07-16"
    

    openjdk-12.0.2_linux-x64_bin.tar.gz:
    IMPLEMENTOR="Oracle Corporation"
    JAVA_VERSION_DATE="2019-07-16"
    

    通过 oracle-java7-installer 和 oracle-java8-installer 包安装在 Ubuntu 上的 Oracle Java 7 和 8 还提供 ${java.home}/release ,包含:
    BUILD_TYPE="commercial"
    

    ${java.home}/legal/java.base/LICENSE

    Java 9+ 发行版包含 ${java.home}/legal目录。正在检查 ${java.home}/legal/java.base/LICENSE :
  • openjdk-9+181_linux-x64_ri.zip: GPLv2 + 类路径异常
  • jdk-9+181_linux-x64_ri.zip: GPLv2 + 类路径异常
  • serverjre-9_linux-x64_bin.tar.gz: "请引用 http://java.com/license "
  • openjdk-10+44_linux-x64_bin_ri.tar.gz: GPLv2 + 类路径异常
  • jdk-10_linux-x64_bin_ri.tar.gz:GPLv2 + 类路径异常
  • openjdk-11+28_linux-x64_bin.tar.gz:GPLv2 + 类路径异常(legal/*/LICENSE 相同)
  • jdk-11.0.4_linux-x64_bin.tar.gz:“请引用https://java.com/otnlicense”(legal/*/LICENSE相同)
  • openjdk-12.0.2_linux-x64_bin.tar.gz: GPLv2 + 类路径异常

  • Ubuntu的openjdk-11-jre-headless 11.0.4+11-1ubuntu2~18.04.3 没有提供${java.home}/legal/*/LICENSE .

    概括

    奇怪的是,它看起来像 ${java.home}/LICENSE 中的“https://java.com/ bc_l icense”是 的一个很好的迹象OTN - 获得许可的 JRE。我认为对于 2019 年 3 月 16 日之后的 Oracle 版本,LICENSE 中的 URL 是错误的。从“http://java.com/license”改为“https://java.com/bc_license”;他们应该将其更改为“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"或以后。

  • 不过,欢迎提供更可靠的答案!

    关于java - 有没有办法查询 JVM/JRE 的许可证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57799138/

    有关java - 有没有办法查询 JVM/JRE 的许可证?的更多相关文章

    1. ruby - ECONNRESET (Whois::ConnectionError) - 尝试在 Ruby 中查询 Whois 时出错 - 2

      我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.

    2. ruby - 难道Lua没有和Ruby的method_missing相媲美的东西吗? - 2

      我好像记得Lua有类似Ruby的method_missing的东西。还是我记错了? 最佳答案 表的metatable的__index和__newindex可以用于与Ruby的method_missing相同的效果。 关于ruby-难道Lua没有和Ruby的method_missing相媲美的东西吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/7732154/

    3. ruby-on-rails - rails 目前在重启后没有安装 - 2

      我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

    4. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

      我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

    5. java - 等价于 Java 中的 Ruby Hash - 2

      我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

    6. ruby-on-rails - 在 Rails 和 ActiveRecord 中查询时忽略某些字段 - 2

      我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr

    7. java - 从 JRuby 调用 Java 类的问题 - 2

      我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

    8. 没有类的 Ruby 方法? - 2

      大家好!我想知道Ruby中未使用语法ClassName.method_name调用的方法是如何工作的。我头脑中的一些是puts、print、gets、chomp。可以在不使用点运算符的情况下调用这些方法。为什么是这样?他们来自哪里?我怎样才能看到这些方法的完整列表? 最佳答案 Kernel中的所有方法都可用于Object类的所有对象或从Object派生的任何类。您可以使用Kernel.instance_methods列出它们。 关于没有类的Ruby方法?,我们在StackOverflow

    9. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

      我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

    10. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

      我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

    随机推荐