【发布时间】:2017-10-05 00:17:18
【问题描述】:
我正在尝试构建一个应用程序,该应用程序具有使用 JavaFX 构建的 GUI,并以 java 8 为目标,并带有 java 9 的新版本标志。
编译
import javafx.application.Application;
public class Testing {
public static void main(String... args) {
}
}
当使用
定位 java 9 时javac Testing.java
工作正常(使用--release 9 时也是如此),但是当我添加发布标志时
javac --release 8 Testing.java
编译失败,给出不存在错误
Testing.java:1:error: package javafx.application does not exist
在JDK8 javac下编译没有问题。我尝试使用 --add-modules 标志添加 jfx 模块,但是在将版本设置为 8 时不允许使用该标志。
有没有办法在 java 9 下完成这项工作?似乎它不认为 jfx 包包含在 java 8 中,但它们是(至少在 oracle 的版本中)。
我在 Windows 上使用 java 9 的发行版,并且在最新的 java 8 发行版下构建了相同的应用程序而没有问题。
我尝试将 jfxrt.jar 从我的 java 8 安装(而不是 rt.jar)添加到类路径,同时使用 --release 8 标志进行编译,它确实有效。
我的理解是,release 标志的一个目的是消除安装多个版本的 JDK(或至少是它们的 rt.jar 文件)的需要。我不确定其意图是仅消除对这个文件进行编译的需要,还是消除对任何 JDK 打包文件进行编译的需要(并且 jfxrt.jar 是包含在 JDK8 [至少在 Oracle 版本中] 不需要特殊标志或类路径修改即可使用它。
在不确定意图的情况下,某些东西在 java 8 下可以完美编译,但在面向 java 8 的 java 9 下需要额外的 jar 来编译(并且只编译不运行)(但在以 java 9 为目标时不需要),这似乎是错误的),因此需要多个 JDK。对于更熟悉发布标志的预期实现的任何人,这应该以这种方式工作吗?
【问题讨论】:
标签: java javafx-8 javac java-9