2013-05-17 37 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?