我想尝试在 sbt 中制作一个简单的 JavaFX 应用程序,但似乎 sbt 无法找到任何 javafx
包,给我这样的错误
error: package javafx.application does not exist
error: package javafx.fxml does not exist
error: package javafx.scene does not exist
...等等
而且我发现这很奇怪,因为 javafx
包默认包含在 Java 7+ 中,所以如果有的话,编译器应该可以使用这些包,但似乎没有那样..
有什么帮助吗?
ps: 我没有使用任何javafx
相关的插件,只是纯粹的sbt,我正在尝试编译一个Java 项目,而不是Scala 项目。使用 sbteclipse
最佳答案
如何针对 JavaFX 构建某些东西(在 SBT 或任何其他工具中)在很大程度上取决于您的 JDK 版本:
使用 JDK 8
一切都开箱即用:JavaFX 位于 jre/lib/ext
中,这意味着它位于默认类路径 java
和 javac
中,并且在编译和运行时它应该自动可用。这就是@JacekLaskowski 在他的回答中的配置。
这仅在您仅以 Java 8 为目标时有效:JavaFX 8 不适用于 Java 7,因此针对它进行编译会使您的应用程序仅支持 Java8(除非您确保仅使用在JavaFX 2.x,目标 jdk7 字节码,将 JavaFX 2.x 与您的应用打包等)
使用 JDK 7u6+
JavaFX SDK 与 JDK 一起分发,但它不是自动可用的:它不在任何类路径中,您必须在 jre/lib
中查找它并自己将其添加到类路径中。这就是某些 IDE 在支持 JavaFX 时自动执行的操作。
SBT 不会自动为您执行此操作。有sbt-javafx有点帮助,但是还是需要配置jar的位置等。
使用 JDK 6 到 JDK 7u5
您必须下载独立版本并将其添加到类路径中。上述 jdk7u6+ 案例的其余部分适用。
最后,请注意,JavaFX 在 Java 8 的生命周期中添加了新功能,因此构建您的应用程序可能需要特定版本的 JDK8(这在 JDK7 中也有一些发生),这也是您需要的原因之一应该将 JavaFX 与您的应用程序打包在一起。
基本上,只要您依赖 JavaFX,就必须将 JDK 和/或 JavaFX 本身作为两个非托管依赖项进行跟踪,而各个开发人员则必须检查版本并进行配置。
关于java - 为什么 SBT 在 Java 中找不到 JavaFX 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25472182/