2 回答
TA贡献1853条经验 获得超6个赞
由于您将问题标记为“Saxon”:Saxonica 目前使用 Oracle JDK 构建已发布的 JAR 文件,但由于 Oracle 的许可变更,这可能会在未来发生变化。如果我们确实切换,用户应该无法区分。
不同 JVM 之间的兼容性水平如此之高,以至于我们甚至不用费心在多个 JVM 上进行测试。我不记得曾经有过在一个 JVM 上运行而不在另一个 JVM 上运行的错误。当然,您需要使用正确版本范围内的 JVM/JDK:Saxon 9.8 与 Java 6 及更高版本一起使用,Saxon 9.9 与 Java 8 及更高版本一起使用。
@StephenC 谈到了有关支持哪些平台和不支持哪些平台的供应商政策。在 Saxonica,这从来不是一个支持/不支持的二元决策。如果您发现我们可以在实验室中重现的问题,那么我们会尽力解决;如果您发现只能通过使用某些特殊平台来重现的问题,那么我们会告诉您我们无法修复它:但这并不意味着您“不受支持”。这同样适用于 Java 版本中的“和更高版本”——欢迎您在 Java 版本 17 发布之日使用 Saxon,如果您发现使用日本日历不再有效,那么我们会注意到这个事实;我们不一定会修复它,但我们不会告诉您产品(或客户或平台)不受支持。
TA贡献1811条经验 获得超5个赞
这个类是用 OpenJDK 还是 Sun / Oracle JDK 编译的,这并不重要。给定版本的 OpenJDK 和相应的 Oracle JDK 版本中的 Java 字节码编译器应该生成相同的代码1,如果使用等效选项等调用的话。编译器是从相同的源代码树构建的。
此外,据我所知,OpenJDK 和 Oracle JDK 编译器不会将此信息放入已编译的类中。深入研究 OpenJDK / Oracle JDK 8 的源代码树证实了这一点。标准 javac 编译器3没有发出相关的未记录属性。
我可以使用相同的(第 3 方)罐子吗?
是的。使用 OpenJDK 和 Oracle JDK 编译 JAR 中的类应该没有区别。
需要注意的是 Java版本。如果第 3 方 jar 文件支持(比如说)Java 7,并且您尝试将它与 Java 8(OpenJDK 或 Oracle)一起使用,那么您可能会遇到麻烦,您可能需要使用更新版本的 jar。检查您所依赖的库的支持站点2。
而且......当然......您应该彻底测试您的应用程序,以确定可能(假设)可归因于更改为 OpenJDK 的任何问题。
1 - 由于字节码编译器添加了一些包含源文件和目标文件时间戳的未记录属性,因此文件可能不是逐字节相同的。编译时可以抑制这种情况。
2 - 您可能会发现库供应商只会针对 Oracle JDK 认证他们的库。如果您发现这种情况,您可能应该直接与他们交谈以了解其原因以及对您使用该库的影响。这只能是一个短期问题。(如果供应商长期拒绝支持 OpenJDK 或 Oracle JDK,他们将有可能失去相当大比例的客户。)
3 - 我隐约记得旧的 GNU Jikes 编译器曾经将其他非标准属性放入“.class”文件中以识别编译器,但这无助于区分 Oracle JDK 和 OpenJDK 编译器。
添加回答
举报
