在 Clojure+ 中使用 Java jar

Using Java jar in Clojure+

我是 Clojure 的新手。我正在尝试在 clojure 中使用 java jar,但它似乎不起作用。 我已经构建了路径,将 jar 物理地放在项目的 lib 文件夹中并尝试:

(导入'jml.clustering.NMF)

但我得到这个例外:

ClassNotFoundException jml.clustering.NMF java.net.URLClassLoader.findClass (:-1)

我该如何解决这个问题?提前谢谢你。

仅仅将 jar 放在 lib 目录中不会强制 leiningen 将 jar 包含在类路径中。相反,尝试将库添加到项目的依赖项列表中:

:dependencies [[org.clojure/clojure "1.6.0"]
               [org.realityforge.jml/jml "0.9.3"]]

您可以通过搜索受支持的 public 存储库之一找到可用库的 group/id 和版本。我 searched maven.org for jml 查找我在上面使用的信息。

请注意,这不会使用 jar 的本地副本,而是从存储库下载一个新的并将其缓存在某个地方。这可能并不理想,但对于我自己的项目,我发现让 lein 使用本地 jar 实在是太让人头疼了。使用 clojars 或 maven.org 中的一个非常简单,我可以忽略必须下载一个新副本。

如果 JAR 是您自己的,您可以按照以下步骤使用任何 Maven 存储库中都不可用的本地 JAR。

给定一个罐子:foo.jar

进入你的 Clojure 项目目录:

mvn deploy:deploy-file -DgroupId=local -DartifactId=foo \
 -Dversion=1.0.0 -Dpackaging=jar -Dfile=foo.jar \
 -Durl=file:repo

编辑您的 project.clj 以包含新的依赖项:

 [local/foo "1.0.0"]