目标是让一个独立的Play Framework(2.2)应用程序打开一个包含一些javafx(javafx-8)元素的附加状态窗口。
由于JavaFX类现在在我的类中使用javafx。*的Oracle Java 8实现的默认运行时类路径上,并且使用sbt进行编译应该没问题。
然而,sbt无法找到这些类并退出
play.api.UnexpectedException: Unexpected exception[NoClassDefFoundError: javafx/application/Application]
执行时
..\path-to-play-framework-2.2\play project run
解决此问题的最佳方法似乎是修改项目目录中的build.sbt。如何添加缺失(类)路径?
答案 0 :(得分:2)
可悲的是,JavaFX并没有轻易地将其与sbt构建链接起来。您需要设置JAVA_HOME环境变量并对构建文件进行修改。
Here我有一个存储库,可以设置它。如果您使用sbt构建而不是scala构建,那么重要的一点是:
unmanagedJars in Compile += Attributed.blank(
file(System.getenv("JAVA_HOME") + "/jre/lib/jfxrt.jar")),
fork in run := true
原因是jfxrt.jar是包含JavaFX运行时的存档,默认情况下它不包含在sbt项目的类路径中。
答案 1 :(得分:0)
另一种方法是设置sbt的类路径。这可以在无法解析JavaFX的计算机上完成。
SBT_OPTS="-Xbootclasspath/p:/usr/share/java/openjfx/jre/lib/ext/jfxrt.jar"