1

我正在创建一个 sbt 插件。它的功能之一是显示给定 scala 项目(调用此插件的项目)的依赖关系图。为此,我使用 scalafx,它仍然依赖于 javafx jar。所以我需要在我的插件 build.sbt 中添加以下命令:

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

它编译并且运行良好。但当我将它用作另一个 sbt 项目的插件时(在 project/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 时如何在运行时提供它?

谢谢

4

1 回答 1

0

我面临同样的问题(使用不同的 .jar 文件),我找到了解决方法。我知道这不是我们正在寻找的(一种插件在被另一个项目使用时自动在其类路径中包含该 .jar 文件的方法),但它可以工作。添加行

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

到文件yourMainProject/project/plugin.sbtaddSbtPlugin(...)与插件放置行的同一文件。

希望它有效。如果你能找到一种好的方法来解决它,请告诉我。

还要检查这个答案,它可能会有所帮助如何在 sbt 插件中生成源?

于 2014-08-25T02:38:18.780 回答