Clojure,Lein,JavaFx,原生代表

时间:2012-06-20 00:53:39

标签: clojure javafx-2 leiningen

上下文

我想将JavaFx与clojure一起使用。

我知道http://nailthatbug.net/2011/06/clojure-javafx-2-0-simple-app/

问题:

有没有办法让使用Clojure的JavaFX在lein中使用native-deps?

谢谢!

4 个答案:

答案 0 :(得分:3)

我创建了一个简单的Clojure and JavaFX example on Github。在Ubuntu上测试我必须使用 deploy:deploy-file 目标(安装:install-file对我不起作用)将JavaFX运行时安装到我的本地Maven存储库中。

mvn deploy:deploy-file -DgroupId=local.oracle -DartifactId=javafxrt -Dversion=2.2.0 -Dpackaging=jar -Dfile=/usr/lib/jvm/java-7-oracle-amd64/jre/lib/jfxrt.jar -Durl=file:/home/raju/.m2/repository

确保正确设置了以下参数:

  • -Dfile = {jre / lib文件夹中jfxrt.jar的完整路径}
  • -Durl = file:{Maven存储库的完整路径,例如$ HOME / m2.repository}

在project.clj中,我在将JAR安装到存储库时添加了基于-DgroupId和-DartifactId值的依赖项。如果您使用更改这些值,请确保相应地更改依赖关系:

[local.oracle/javafxrt "2.2.0"]

Java能够毫无问题地加载二进制库。如果Java报告加载二进制库时出现问题,例如

  

引起:java.lang.UnsatisfiedLinkError:无法加载库:   /usr/lib/jvm/javafx-sdk/rt/lib/amd64/libglass.so

在SO上查看这两个问题:

What is LD_LIBRARY_PATH and how to use it?
java.lang.UnsatisfiedLinkError no *****.dll in java.library.path

答案 1 :(得分:1)

由于JavaFx具有本机依赖关系,因此您的选项仅限于,

  • 将这些依赖项与您的项目(包括它们)一起发送,
  • 创建一个可以依赖于哪个包(提供它们)的包,
  • 或让您的软件包要求用户以其他方式安装它们。

因为您链接的教程涵盖了程序包/程序的用户自己安装JavaFx的情况,使用robert.hook并依赖最终用户的程序包管理器来提供实际的本机依赖项。我将介绍如何让您的软件包/程序包含依赖项。

native-deps可用于向您的包发送本机依赖项。您只需要在相应的目录中添加所有.so,.dll,.etc文件。我认为项目github页面比解释结构更好。

答案 2 :(得分:1)

问题中的链接已被破坏,因此我无法看到您的示例,但使用Java 8,JavaFX现在是标准JDK / JRE的一部分。因此,我认为此时本机依赖性问题无关紧要。

答案 3 :(得分:0)

不确定这是否适用于其他人,但这似乎(到目前为止)对我有用:

mvn install:install-file -DgroupId = javafx -DartifactId = javafx -Dversion = 2.1.0 -Dpackaging = jar -Dfile = / Library / Java / JavaVirtualMachines / 1.7.0.jdk / Contents / Home / jre / lib /jfxrt.jar

我不知道为什么会这样,但我相信jfxrt.jar有我需要的文件。然后,在此之后,我将它作为

在project.clj中点燃
[javafx "2.1.0"]

在:dependencies(not:native-deps)部分。

[写完这篇文章后,我真的不知道为什么这样看起来有效。]