2014-04-17 83 views
2

目標是創建一個獨立的Play Framework(2.2)應用程序,其中打開一個包含一些javafx(javafx-8)元素的附加狀態窗口。在sbt中添加JavaFX(使用播放框架)

由於JavaFX類現在在Oracle Java 8實現的默認運行時類路徑中,在我的類中使用javafx。*,並且使用sbt編譯應該沒問題。

但是SBT執行

..\path-to-play-framework-2.2\play project run 

的最佳方式時來解決這個問題不能找到這些類和與

play.api.UnexpectedException: Unexpected exception[NoClassDefFoundError: javafx/application/Application] 

退出似乎是build.sbt的項目修改目錄。我能做些什麼來添加缺少的(類)路徑?

回答

2

不幸的是,JavaFX並沒有很容易地將它鏈接到某個版本。您需要設置您的JAVA_HOME環境變量並對您的構建文件進行修改。

Here我有一個存儲庫,在這裏設置。如果您使用的是SBT構建,而不是構建階最重要的一點是這個:

unmanagedJars in Compile += Attributed.blank(
    file(System.getenv("JAVA_HOME") + "/jre/lib/jfxrt.jar")), 

fork in run := true 

這樣做的原因是,jfxrt.jar是包含JavaFX運行歸檔,它不包含在類路徑一個sbt項目默認情況下。

+0

我建議將JDK8的路徑更改爲jfxrt.jar。它在/ jre/lib/ext中可用。是否還有一種方法可以避免設置JAVA_HOME env? – Vincent

+0

對不起,我沒有注意到你在使用JDK8。無論如何,這個概念應該是一樣的,你需要找到你的jfxrt.jar。 JAVA_HOME env不是強制性的,但它可能是在系統上獲取jre路徑的最常用方法。您可以嘗試其他方法(例如,將jfxrt.jar文件複製到項目的適當文件夾中,通過配置提供jre路徑或嘗試以某種方式檢測它等),重要的是sbt知道此jar在哪裏並且運行命令分叉(因爲它不會看到你對類路徑所做的更改)。 –

+0

儘管我不得不修改此代碼並添加了一個後備以防發現JDK/JRE,但我會將其標記爲答案,因爲它給了我正確的方向。 – Vincent