将JavaFX从jdk跨平台中删除后会不会?

JavaFX 11是否跨平台? 正如我在openjfx.org中看到的那样,我必须下载每个平台的版本。 如果是这样,我可以以任何方式以跨平台forms使用它吗? 我应该为每个java版本使用每个javafx版本吗? 不要告诉我使用maven或类似的东西。 我想编写一个跨平台的软件。 而且每个操作系统的每个版本都没有多版本软件。 我在检查操作系统后加载模块但我可以这样做吗? 任何方式都有很多跨平台的库,即使它有本机代码,为什么OpenJFX不这样做呢?

JavaFX 11不再是JDK的一部分,它现在以两种forms分发:

  • 来自https://gluonhq.com/products/javafx/的 SDK。
  • 通过Maven Central,如https://search.maven.org/artifact/org.openjfx/javafx-controls/11/jar

下载JavaFX SDK时,您必须选择一个平台,与为平台安装JDK时相同。 它在API方面仍然是跨平台的,因此您的代码在每个平台上看起来都是一样的,但它在SDK /依赖性方面是特定于平台的。

原因是与每个SDK捆绑在一起的本机库。

如果你看看三个JavaFX 11 SDK包,每个压缩包都有大约40 MB:

  • Windows:压缩39.7 MB,dll库中64.8 MB( jfxwebkit.dll只有59.2 MB),以及15.5 MB的jar和源代码。
  • Mac:39.7 MB压缩,dylib库中72.2 MB( libjfxwebkit.dylib只有67.8 MB),以及15.6 MB的jar和源代码。
  • Linux:43.8 MB压缩,84.9 MB,因此库( libjfxwebkit.so只有80.1 MB),以及15.8 MB的jar和源代码。

现在的问题是:你会将三个平台捆绑在一起吗? 总压缩大小为120 MB,三个平台大约220 MB的解压缩本机库?

在openjfx-dev邮件列表中确实存在关于这个问题的争论,但我认为采用的方法是正确的。

如果您使用Maven / Gradle并从Maven Central检索依赖项,则必须在Gradle上指定平台的分类器。 请参阅“入门” 示例 。 Maven在内部完成,所以即使你没有设置分类器,它也只为你的平台下载jar。

因此,对于不使用WebView的常规项目,它可能是有意义的,因为您将仅为您的平台下载所需的模块依赖项: javafx.basejavafx.graphicsjavafx.controlsjavafx.fxml

但到目前为止,这并不是现在可以改变的东西,您可以使用与平台无关的JavaFX API,但使用特定于平台的JavaFX SDK /模块。

请注意,在分发JavaFX应用程序时,您将使用Jpackager,您将为这三个不同的平台发布三个不同的版本,因此无论哪种方式,您都需要特定于平台的分发。

JavaFX是用Java编写的,它是在JVM上运行的,它是跨平台的。 这意味着JavaFX也是跨平台的。

您下载了不同的版本以在您的计算机上运行JVM。 但是您的JavaFX代码可以在任何这些版本上运行,因此它是跨平台的。