为什么SBT不能在Java中找到JavaFX包

Ele*_*fee 4 java javafx sbt

我想尝试在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
Run Code Online (Sandbox Code Playgroud)

... 等等

鉴于javafx默认情况下该软件包包含在Java 7+中,我发现这很奇怪,所以如果有的话,编译器应该可以使用这些软件包,但看起来并不是这样.

有帮助吗?

ps:我没有使用任何javafx相关的插件,只是纯粹的sbt,我正在尝试编译Java项目,而不是Scala.该项目设置为与Eclipse兼容使用sbteclipse

gou*_*ama 7

如何针对JavaFX构建(在SBT或任何其他工具中)取决于您的JDK版本:

使用JDK 8

它所有的工作开箱:JavaFX是位于jre/lib/ext,这意味着它是默认的类路径javajavac,它应该自动出现两种编译和运行时.这就是@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,帮助一点点,但你仍然需要配置罐等的位置

使用JDK 6到JDK 7u5

您必须下载独立版本并将其添加到类路径中.上面的jdk7u6 +案例的其余部分适用.


最后,请注意在Java 8的生命周期中将新功能添加到JavaFX中,因此构建应用程序可能需要特定版本的JDK8(这在JDK7中也有一点发生),这也是您应该打包的原因之一JavaFX与您的应用程序.

基本上,只要依赖JavaFX,就必须将JDK和/或JavaFX本身作为两个非托管依赖项跟踪,各个开发人员必须检查版本和配置事物.