Enclojure REPL在Load上找不到依赖的clj文件

时间:2009-11-04 16:02:45

标签: clojure enclojure

我遇到了Enclojure REPL的问题,并使用了clojure模块。文件/ ns的加载/更改REPL与隔离的clojure文件一起工作正常,但是打破了一个文件,该文件引用了我尝试从我的项目中使用的另一个clojure文件。

以下是具体步骤:

  • 创建一个新项目。
  • 创建一个clojure模块foobar.clj(namespace com.acme.foobar)
  • 定义一个在foobar.clj中返回值的函数:

    (ns com.acme.foobar   (:使用com.acme.othermodule))

    (defn myfunc1 []   “A”)

  • 打开Netbeans IDE REPL

  • 从foobar.clj的上下文菜单中选择:

    • 将REPL更改为文件/ ns
    • 加载
  • 从REPL调用(myfunc1)函数。这很好用:

    com.acme.foobar => (myfunc1) “一个”

当我尝试从foobar引用其他文件时,问题就开始了。这是我的所作所为:

  • 创建一个新的clojure模块othermodule.clj

    (ns com.acme.othermodule)

    (defn fromothermodule []   “B”)

  • 现在尝试从foobar.clj中调用它:

    (defn myfunc2 []   (fromothermodule))

  • 从othermodule.clj的上下文菜单中选择:

    • 将REPL更改为文件/ ns
    • 加载

为了使REPL意识到有新模块,它应该能够运行。

  • 我对foobar.clj执行相同的操作,现在引用othermodule.clj,但我得到:

CompilerException java.io.FileNotFoundException:找不到类路径上的com / acme / othermodule__init.class或com / acme / othermodule.clj:(NO_SOURCE_FILE:50) com.acme.foobar =>

此错误消息来自“将REPL更改为文件/ ns”和“加载”

我错过了什么?我应该做一些其他技巧来实现这一目标吗?即使是绝望的Run-> Clean and Build主项目也无济于事(这当然会让REPL业务变得非常痛苦)。

我正在使用NetBeans 6.7.1和enclojure-plugin-2009-11-3.nbm。

2 个答案:

答案 0 :(得分:2)

在Google群组中获得Eric Thorsen的正确解决方案:

从窗口菜单创建REPL有三种方法。不要使用任何这些,而是​​正确 单击项目并“启动项目REPL”。现在路径已相应设置。

答案 1 :(得分:1)

我的第一个建议是从NetBeans / Enclojure迁移到IDEA / La Clojure。 JetBrains最近创建了他们的IDE的开源版本,而Clojure插件在其中运行良好。自从发现这个以来,我抛弃了NetBeans和Enclojure。我觉得La Clojure很乐意上班,但当然你的里程可能会有所不同。

从我在NetBeans中执行此操作开始,我似乎记得Enclojure源代码驻留在名为“lib”的子目录中。我想我通过在要加载的文件名上摆弄目录前缀来解决类似的问题。可能类似于“../lib/YourName”。我通过反复试验来管理这个,所以我无法将确切的规则和语法联系起来。

可能会有所帮助的两件事:

  • 您可以运行(println(System / getProperty“java.user.dir”))之类的内容,以找出Clojure认为它正在执行的位置。

  • 您可以像我一样开始使用绝对路径,直到找到正确的目录名称。类似“/ home / carl / NetbeansProjects / MyProject / lib / myfile.clj”