我遇到以下方法的问题:
sun.security.x509.AuthorityKeyIdentifierExtension.getEncodedKeyIdentifier()
它存在于 openJDK 中,但 oracleJDK 中不存在。我一直认为,除了一些关于许可的特殊情况,这些JDK应该是相同的......
虽然我可以解决这个问题,但我担心还有其他我可能不了解的不兼容性。
答案 0 :(得分:0)
该类不是公共Java API的一部分,因此不保证(甚至可能)存在于每个JRE实现中,也不保证同一提供者实现的每个版本都存在。
如果它不是标准API的一部分,那么你就不能指望它。
虽然OpenJDK和OracleJDK实现碰巧非常相似,因为它们共享一个共同的历史,但它们可以随时在任何私有API或实现细节中分歧(或收敛),仅仅因为它们是单独运行的项目。
相反,您应该在java.security
和javax.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/