关于Java:将JavaFX从jdk跨平台删除后是否可以?

Does JavaFX after removing it from jdk cross-platform?

JavaFX 11是跨平台的吗?正如我在openjfx.org中看到的那样,我必须下载每个平台的发行版。如果是这样,我可以以任何形式跨平台使用它吗?我应该为每个Java版本使用每个javafx版本吗?
不要告诉我使用Maven之类的东西。我想编写一个跨平台软件。每个操作系统的每个发行版都没有多版本软件。我想在检查操作系统后加载模块,但是我可以这样做吗?
无论如何,有很多跨平台的库,即使它们都有本机代码,那么为什么OpenJFX不这样做呢?
编辑
我没有对此进行测试,但是也许我们可以包括来自maven的所有系统的所有javafx依赖项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<dependency>
    <groupId>org.openjfx</groupId>
    javafx-controls</artifactId>
    <version>15.0.1</version>
    <classifier>win</classifier>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    javafx-controls</artifactId>
    <version>15.0.1</version>
    <classifier>linux</classifier>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    javafx-controls</artifactId>
    <version>15.0.1</version>
    <classifier>mac</classifier>
</dependency>
</dependency>


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

  • 作为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),jar和源文件中为15.5 MB。
  • Mac:压缩后为39.7 MB,dylib库中为72.2 MB(libjfxwebkit.dylib仅具有67.8 MB),jar和源文件中为15.6 MB。
  • Linux:压缩后为43.8 MB,因此库中为84.9 MB(libjfxwebkit.so仅具有80.1 MB),jar和源中为15.8 MB。

现在的问题是:您会将三个平台捆绑在一起吗?三个平台的总压缩大小为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代码可以在任何这些版本中运行,因此它是跨平台的。