我们正在从甲骨文jdk8迁移到OpenJDK 8,但是我们的系统有JavaFX代码,需要从JavaFX迁移到OpenJFX。
我想知道甲骨文中的JavaFX与openjfx8之间的关系是什么。有人能帮我解释一下吗?
发布于 2021-09-09 02:16:34
Oracle解包和开源的JavaFX库
Oracle正在将自己的JavaFX实现与其Oracle产品的Java8版本捆绑在一起。
后来,Oracle停止了这个包。
OpenJFX项目
同时,甲骨文开源了它的JavaFX实现,使该源代码成为OpenJDK项目的一个子项目。这个子项目被称为OpenJFX (因为甲骨文保留了它的“Java”品牌的商业权利)。见其GitHub页面和它的OpenJDK维基页面。
甲骨文现在与OpenJFX公司共同领导胶子的开发。胶子出售对其他库和服务的支持、许可证。甲骨文也可能出售支持。
OpenJFX是积极开发的。一个主要版本与Java的每个主要版本几乎同时到达。Java 17将于本月(2021-09)发布,OpenJFX 17版本已经可用也将发布。JavaFX 17需要JDK 11或更高版本。见https://github.com/openjdk/jfx/blob/jfx17/doc-files/release-notes-17.md。
有关更多信息和开发人员文档,请参见OpenJFX站点:https://openjfx.io/
Oracle是由OpenJDK构建的
你说过:
我们将从oracle jdk8迁移到openjdk 8。
Oracle产品基于OpenJDK。甲骨文致力于它们之间的功能对等。唯一的区别是:(a) Oracle出售对Oracle的支持,在生产中使用时需要付费(但不用于开发和测试),(b) Oracle保留直接将任何必要的修补程序直接发送给其付费客户的权利,而无需等待修补程序在OpenJDK过程中顺利完成。
部署JavaFX/OpenJFX库的选项
Oracle的当前版本不再绑定JavaFX库。因此,无论您选择哪种Java发行版(Pivotal、Azul Systems、Microsoft、SAP、Amazon、BellSoft、Oracle、Red /IBM、Adoptium/AdoptOpenJDK等等),您都需要解决提供必要的OpenJFX库的问题。
一种选择是将库与应用程序捆绑在一起。新的jlink和jpackage工具可能会有所帮助。
另一个选项是将OpenJFX库的副本放在用户机器的类路径上。
第三种选择是使用包含OpenJFX库的JDK发行版。至少有两家公司提供了包括OpenJFX在内的JDK发行版的不同版本:
OpenJFX从第11版开始
你说过:
但是我们的系统有javafx代码,需要从javafx迁移到openjfx吗?
我只看到编号为11到18的OpenJFX版本,只有OpenJFX 11和17将有长期支持。
他们推荐OpenJFX使用Java 16,最低要求是Java 11,因此您可能无法将基于Java 8的项目迁移到OpenJFX。
建议:迁移到版本17
Java 17将于本月到期,预计将被指定为长期支援(LTS)版本。我建议您考虑将Java 8应用程序更新为Java 17和OpenJFX 17。自版本8以来,Java和JavaFX都在飞速发展。
首先研究珠宝商的回答,通过JavaFX和OpenJFX的不同版本讨论技术变化。然后仔细阅读两个产品系列的所有发行说明,为您的应用程序保留任何潜在问题的记录。那就试试吧。尝试转换,看看会出现什么问题。试着修理它们。如果你最终成功了,你就会为未来做好准备。
资源
您可能需要阅读这些白皮书:
发布于 2021-09-09 23:07:40
背景
这一信息是对Basil出色回答的补充,Basil已经全面涵盖了关于这一主题的大部分相关信息。
这个问题是关于JavaFX 8的,它现在已经过时了。这里的特征差异信息是为了历史目的而提供的。
强烈建议任何现有项目从JavaFX 8迁移到最近的JavaFX版本,并且任何新项目都使用基于openjfx源代码的最新JavaFX版本(例如JavaFX 17+)。
什么是Oracle 8和JavaFX 8在OpenJDK中是什么?
Oracle 8是JDK和JRE的一个发行版,其中包括JavaFX 8的一个实现。
JavaFX 8是开源的,是OpenJDK项目的一部分。您可以从JavaFX的OpenJDK项目中找到指向在openjdk github站点上 8源的链接(外部链接可能在将来的某一天消失或死亡)。
Oracle JDK 8很大程度上是由这些开源组件构建的,加上下面概述的几个封闭源代码组件。
只使用开放源代码(减去下面概述的封闭源代码中的特性)就可以构建包含OpenJDK 8的完整版本的JavaFX 8。
然而,许多基于OpenJDK 8的发行版(例如那些作为JDK和JRE实现提供给普通Linux发行版的发行版)并不包括OpenJDK项目的JavaFX实现部分。
此外,来自IBM等供应商的第三方JDK发行版也不包括JavaFX实现。
因此,对于JavaFX 8开发,使用的主要发行版是Oracle /JRE 8,而不是只包含JavaFX 8的OpenJDK实现的发行版。
Oracle JDK 8和OpenJDK 8源代码实现/特性差异
该信息基于以下信息:
我再也找不到官方来源的链接来描述这些差异。
Oracle 8实现了OpenJDK 8开源实现中不可用的一些特性。与JavaFX相关的组件:
对于大多数用户来说,除了缺乏WebStart/Applet支持之外,这两个版本之间的功能/功能差异并不重要。
Oracle实现的许可模型存在差异,其中包括纯从JavaFX项目源代码构建的OpenJDK和OpenJDK版本。如果这些许可的不同细节对你很重要,我鼓励你对这个主题做你自己的研究。
JavaFX 9& 10
在Java9、VP6编码已不再适用于JavaFX和Oracle /Browser嵌入式应用程序部署技术也受到了反对。中。
因此,虽然该功能包含在Oracle的这些版本中,而不是OpenJFX源代码中,但该技术已经标记为以后要删除(如果不是更早的话,JDK/JRE/JavaFX11版本也会这样做)。
JavaFX 11+
对于JavaFX 11+,上面关于特性差异的信息完全不相关,因为JavaFX 11+的下载页面声明:
从JDK 11开始,
javafx.*模块不再作为JDK的一部分包括在内。现在,它们作为一个独立的、未打包的OpenJFX版本单独分发。它们可以作为maven工件用于Maven/Gradle,也可以作为独立的SDK使用,其中包含用于jlink的jlink文件。
因此,没有甲骨文专用版本的JavaFX for 11+ (据我所知),对于这些版本,只有开放源代码openjfx项目(或其他基于单一openjfx源代码创建其打包的发行版)提供的模块。
有关JavaFX 11+的详细信息,请参阅openjfx.io框架用户站点或内部openjfx开发人员站点。
https://stackoverflow.com/questions/69111336
复制相似问题