为什么openJDK和oracleJDK之间存在差异

时间:2016-09-19 14:51:23

标签: java openjdk jsse

我遇到以下方法的问题:

sun.security.x509.AuthorityKeyIdentifierExtension.getEncodedKeyIdentifier()

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

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

3 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

不属于标准软件包和不推荐使用的类的类可能不是jdk的一部分。

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

只是为了完成答案,“general”两个编译代码都来自open jdk和oracle jdk中的相同源代码。但是oracle jdk和open jdk有不同的许可证,因此也没有什么差别。通常,差异与普通类的来源无关,而与类或整个包的存在与否有关。作为示例,请参阅font library

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

答案 2 :(得分:-1)

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

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

实际上,Oracle JDK的构建过程是从OpenJDK源代码构建的。因此,Oracle JDK和OpenJDK之间没有重大的技术差异。

除基本代码外,Oracle JDK还包括Oracle Java插件和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/