在Clojure REPL中使用自定义Java类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Clojure REPL中使用自定义Java类相关的知识,希望对你有一定的参考价值。

在Eclipse中,使用CCW插件,我想将clojure文件加载到REPL中。问题是我有一个我自己的java类的import语句,但显然它不在我的类路径中。

(ns my-clj-ns
  (:import [alg.gen Enumerator]))

我是否需要在Clojure REPL中使用/测试的每个类中制作罐子?

目前,尝试将我的clj加载到REPL会导致错误:“在Clojure REPL中加载文件”未正常完成。有关更多信息,请参阅日志。显示java.lang.NullPointerException

任何帮助将不胜感激。

答案

你的代码看起来很好。

我怀疑问题出在您的Eclipse Java Build Path上,它决定了Eclipse在应用程序的类路径中包含的内容。

特别是,如果您的Java类位于单独的项目中,则需要将该项目添加到构建路径(右键单击项目/属性/ Java构建路径/项目)或将其打包为jar。

当你开始有更复杂的构建要求时,你可能还想开始查看Maven来为你处理这类事情。 Maven是一个学习/设置的痛苦,但从长远来看它是值得的。

Leiningen也是一个很好的工具,但我个人不使用它的原因如下:

  1. 它在命令行上很棒,但是没有与Eclipse工作流程很好地集成
  2. Maven在Java世界中得到了更广泛的使用和更好的支持
另一答案

您可以让leiningen为您编译这些,

:javac-options {:destdir "classes/"}
:java-source-path "src/main/java" ; location of Java source

选项或手动编译它们并将类文件移动到classes /目录。无需创建jar。

另一答案

当你在ccw repl中时,你可以点击alt-e来查看堆栈跟踪。如果你得到一个NullPointerException,我不认为它是一个类路径问题。

另一答案

如果你想学习如何做这个,那里有很好的指南。

https://github.com/technomancy/leiningen/blob/master/doc/MIXED_PROJECTS.md

但是在gist中,有一个类似于Java源代码的项目定义。

(defproject megacorp/superservice "1.0.0-SNAPSHOT"
  :description "A Clojure project with a little bit of Java sprinkled here and there"
  :source-paths      ["src/clojure"]
  :java-source-paths ["src/java"])

以上是关于在Clojure REPL中使用自定义Java类的主要内容,如果未能解决你的问题,请参考以下文章

Clojure:使用来自 REPL 的库函数

Clojure 中的 Java 输入(读取行)在 Emacs 中无法正确读取

在 Clojure 中使用 repl 而不是 println

Clojure 的加载字符串在 repl 中有效,但在 `lein run` 中无效

Clojure - 在没有project.clj的情况下启动REPL

无法在spacemacs cider(Clojure)中切换到repl