在Clojure REPL中使用自定义Java类

时间:2011-12-06 14:30:07

标签: java clojure classpath

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

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

我是否必须在Clojure REPL中为每个我想要使用/测试的课程制作罐子?

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

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

您可以让leiningen使用

为您编译这些内容
:javac-options {:destdir "classes/"}
:java-source-path "src/main/java" ; location of Java source

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您的代码对我来说很好。

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

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

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

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

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

答案 3 :(得分:0)

如果你想学习如何做到这一点,那就非常好了。

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"])