2013-05-17 32 views
1

我正在創建一個sbt插件。它的一個特點是顯示一個給定scala項目(調用這個插件的依賴關係圖)。爲此,我使用scalafx,它仍然取決於javafx jar。所以我需要在我的插件build.sbt中添加以下命令:sbt插件中的UnmanagedJars

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

它編譯和運行良好。但是,當我將它用作另一個sbt項目的插件時(使用項目/ plugins.sbt中的addSbtPlugin命令)時不行。當我調用插件時,出現以下錯誤:

java.lang.NoClassDefFoundError: javafx/event/EventTarget 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:787) 

在classLoader中找不到javafx類。我嘗試了程序集插件 - 但它並沒有打包爲我使用的scala 2.10。

有誰知道我的javafx jar在我的插件調用時如何在運行時顯示?

感謝

回答

0

我面臨同樣的問題(有不同的.jar文件),我發現一個解決辦法。我知道這不是我們正在尋找的東西(這是插件在被另一個項目使用時在其類路徑中自動包含該.jar文件的一種方式),但它起作用。 添加行

unmanagedJars in Compile += { 
    Attributed.blank(file(System.getenv("JAVA_ORACLE") + "/jre/lib/jfxrt.jar")) 
} 

到文件yourMainProject/project/plugin.sbt。與插件放置線addSbtPlugin(...)相同的文件。

希望它有效。如果你想找到一種方法來解決問題,請告訴我。

也檢查這個答案,它可能有幫助How to generate sources in an sbt plugin?