从jdk跨平台删除JavaFX后,它是否会出现?
问题内容:
JavaFX
11是否跨平台?正如我在openjfx.org中看到的那样,我必须下载每个平台的发行版。如果是这样,我可以以任何方式跨平台使用它吗?我应该为每个Java版本使用每个javafx版本吗?不要告诉我使用Maven之类的东西。我想编写一个跨平台软件。每个操作系统的每个发行版都没有多版本软件。检查操作系统后,我无法加载模块,但是我可以这样做吗?无论如何,有很多跨平台的库,即使它们都有本机代码,那么为什么OpenJFX不这样做呢?
问题答案:
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.base
,javafx.graphics
,javafx.controls
和javafx.fxml
。
但是到目前为止,这已经是不可更改的了,您可以获得与平台无关的JavaFX API,但具有特定于平台的JavaFX SDK /模块。
请注意,分发JavaFX应用程序时,将使用Jpackager,并且将为三个不同的平台发布三个不同的版本,因此无论哪种方式,都需要特定于平台的分发。