【问题标题】:Why are there differences between openJDK and oracleJDK为什么openJDK和oracleJDK有区别
【发布时间】:2016-09-19 14:51:22
【问题描述】:

我对以下方法有问题:

sun.security.x509.AuthorityKeyIdentifierExtension.getEncodedKeyIdentifier()

openJDK 中存在,oracleJDK 中不存在。我一直认为,除了一些关于许可的特殊情况,这些 JDK 应该是相同的......

虽然我可以解决这个问题,但我担心还有其他我可能不知道的不兼容问题。

【问题讨论】:

  • 那是一个太阳包。我怀疑它是否保证始终像 java 和 javax 包那样可用。 OpenJDK 可能落后于 Oracle 的实施。
  • 在 Javadoc 中有一个针对使用 sun.* 包的特定警告,它已经存在 20 年了。

标签: java openjdk jsse


【解决方案1】:

不属于标准包的类和不推荐使用的类不能属于 jdk。

在您的情况下,您可以尝试使用包javax.security.cert 的类来解决问题。在 google 上搜索可以找到一些教程,例如this one


只是为了完成答案,“一般”两个编译代码都来自开放 jdk 和 oracle jdk 中的相同源代码。但是 oracle jdk 和 open jdk 有不同的许可证,所以也有一些小的差异。通常,差异与公共类的来源无关,而与类或整个包的存在与否有关。例如,请参阅font library

这不是唯一的区别。正如您在代码中所指出的,安全包也不同,因为开放 jdk 还添加了 x509 证书类的旧 sun 版本,而 oracle jdk 没有。如果它们不是标准包的一部分,则无法保证包含哪些类。因此,如果您在不同 jdk 环境中运行代码时遇到问题,请仅使用标准包或根据需要显式导入库。

【讨论】:

  • 我知道,但这不是问题所在。有声明说两个 jdk 都是从同一来源构建的,而我发现接缝与此相矛盾。
  • @SteffenHeil,如果你知道的话。为什么要问?
  • 阅读javapapers.com/java/…,然后重新阅读我的问题。
  • @SteffenHeil 我直接回复了主要答案。
【解决方案2】:

该类不是公共 Java API 的一部分,因此不能保证(甚至可能)存在于每个 JRE 实现中,也不能保证同一提供者实现的每个版本中都存在。

如果它不是标准 API 的一部分,那么您就不能指望它。

虽然 OpenJDK 和 OracleJDK 的实现碰巧非常相似,因为它们有着共同的历史,但它们随时可能在任何私有 API 或实现细节上出现分歧(或收敛),这仅仅是因为它们是单独运行的项目。

相反,您应该在 java.securityjavax.security 中使用与实现无关的 API 来处理证书。

【讨论】:

  • 我知道,但这不是问题所在。有声明说两个 jdk 都是从同一来源构建的,而我发现接缝与此相矛盾。
  • 我决定专注于你XY problem的X。
  • 实际的答案很无聊(我在中间段落中提到过)——即使它们是从完全相同的源存储库构建的,它们也不会在完全相同的时间发布,并且版本号没有一对一的对应关系。
【解决方案3】:

Oracle JDK 以前称为 SUN JDK,那是在被 Oracle 收购之前。早些时候,它是 Java 语言的官方专有实现。收购后,它被命名为 Oracle JDK,由 Oracle 团队维护。

OpenJDK 是 Java 标准版平台的开源实现,由 Oracle 和开放 Java 社区贡献。

实际上,Oracle JDK 的构建过程是从 OpenJDK 源代码构建的。所以 Oracle JDK 和 OpenJDK 在技术上没有大的区别。

除了基础代码,Oracle JDK 还包括 Oracle 对 Java Plugin 和 Java WebStart 的实现。还分别包括第三方闭源和开源组件,如图形光栅化器和 Rhino。

Oracle JDK 和 OpenJDK 如何保持同步: 所有开发和错误修复都在 OpenJDK 中进行,然后传播到 Oracle JDK。与一般修复不同,安全修复发生在私有林中,无需公共代码审查,然后将它们推送到 Oracle JDK,然后再推送到 OpenJDK。

更多关于http://javapapers.com/java/oracle-jdk-vs-openjdk-and-java-jdk-development-process/

【讨论】:

  • 我知道那个描述,但如果是真的,怎么会在同一个类中使用不同的方法呢?
  • @SteffenHeil 如果您知道这一点,您应该在问题中包含您之前的研究。
  • @OrangeDog 为什么?不言而喻,这两者不是从相同的源代码构建的,正如这个答案中所断言的那样。否则被问到的问题就不存在了。
猜你喜欢
  • 2018-06-01
  • 2019-04-17
  • 2014-04-16
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多