从 jdk 跨平台中删除后,JavaFX 是否存在?
Does JavaFX after removing it from jdk cross-platform?
JavaFX 11 是跨平台的吗?正如我在 openjfx.org 中看到的那样,我必须为每个平台下载版本。如果是这样,我可以以任何方式以跨平台形式使用它吗?我应该为每个 java 版本使用每个 javafx 版本吗?
不要告诉我使用 maven 或类似的东西。我想编写一个跨平台软件。而不是每个 OS 每个版本的多版本软件。我想在检查 OS 后加载模块,但我可以这样做吗?
无论如何,有很多库是跨平台的,即使它有本机代码,那么为什么 OpenJFX 不这样做呢?
编辑
我没有对此进行测试,但也许我们可以包含来自 maven 的所有系统的所有 javafx 依赖项
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>15.0.1</version>
<classifier>win</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>15.0.1</version>
<classifier>linux</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>15.0.1</version>
<classifier>mac</classifier>
</dependency>
</dependency>
JavaFX是写在Java里的,在JVM上是运行,是跨平台的。所以这意味着 JavaFX 也是跨平台的。
您将不同的版本下载到 运行 您计算机上的 JVM。但是您的 JavaFX 代码可以在任何这些版本上 运行,因此它是跨平台的。
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/dependencies.
方面是特定于平台的
原因是与每个 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,so 库中 84.9 MB(
libjfxwebkit.so
只有 80.1 MB),jar 和源代码中 15.8 MB。
现在的问题是:你们会把三个平台合二为一吗?总压缩大小为 120 MB,三个平台的解压缩本机库大约 220 MB?
在 openjfx-dev 邮件 list 中恰好有关于这个问题的争论,但我相信所采用的方法是正确的。
如果您使用 Maven/Gradle 并从 Maven Central 检索您的依赖项,则在 Gradle 上您必须为您的平台指定分类器。请参阅入门 sample。 Maven 在内部执行此操作,因此即使您不设置分类器,它也只会为您的平台下载 jar。
因此对于不使用 WebView 的常规项目,它可能有意义,因为您将只下载平台所需的模块依赖项:javafx.base
、javafx.graphics
、javafx.controls
和 javafx.fxml
。
但是到目前为止,这不是现在可以改变的事情,您得到的是与平台无关的 JavaFX API 但具有特定于平台的 JavaFX SDK/modules。
请注意,当您分发 JavaFX 应用程序时,您将使用 Jpackager,并且您将为三个不同的平台发布三个不同的版本,因此无论哪种方式,您都需要特定于平台的分发。
JavaFX 11 是跨平台的吗?正如我在 openjfx.org 中看到的那样,我必须为每个平台下载版本。如果是这样,我可以以任何方式以跨平台形式使用它吗?我应该为每个 java 版本使用每个 javafx 版本吗? 不要告诉我使用 maven 或类似的东西。我想编写一个跨平台软件。而不是每个 OS 每个版本的多版本软件。我想在检查 OS 后加载模块,但我可以这样做吗? 无论如何,有很多库是跨平台的,即使它有本机代码,那么为什么 OpenJFX 不这样做呢?
编辑
我没有对此进行测试,但也许我们可以包含来自 maven 的所有系统的所有 javafx 依赖项<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>15.0.1</version>
<classifier>win</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>15.0.1</version>
<classifier>linux</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>15.0.1</version>
<classifier>mac</classifier>
</dependency>
</dependency>
JavaFX是写在Java里的,在JVM上是运行,是跨平台的。所以这意味着 JavaFX 也是跨平台的。
您将不同的版本下载到 运行 您计算机上的 JVM。但是您的 JavaFX 代码可以在任何这些版本上 运行,因此它是跨平台的。
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/dependencies.
方面是特定于平台的原因是与每个 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,so 库中 84.9 MB(
libjfxwebkit.so
只有 80.1 MB),jar 和源代码中 15.8 MB。
现在的问题是:你们会把三个平台合二为一吗?总压缩大小为 120 MB,三个平台的解压缩本机库大约 220 MB?
在 openjfx-dev 邮件 list 中恰好有关于这个问题的争论,但我相信所采用的方法是正确的。
如果您使用 Maven/Gradle 并从 Maven Central 检索您的依赖项,则在 Gradle 上您必须为您的平台指定分类器。请参阅入门 sample。 Maven 在内部执行此操作,因此即使您不设置分类器,它也只会为您的平台下载 jar。
因此对于不使用 WebView 的常规项目,它可能有意义,因为您将只下载平台所需的模块依赖项:javafx.base
、javafx.graphics
、javafx.controls
和 javafx.fxml
。
但是到目前为止,这不是现在可以改变的事情,您得到的是与平台无关的 JavaFX API 但具有特定于平台的 JavaFX SDK/modules。
请注意,当您分发 JavaFX 应用程序时,您将使用 Jpackager,并且您将为三个不同的平台发布三个不同的版本,因此无论哪种方式,您都需要特定于平台的分发。