首页 文章

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

提问于
浏览
2

我有一个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)“a”

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

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

(ns com.acme.othermodule)

(定义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 回答

  • 1

    从谷歌小组中的Eric Thorsen获得了正确的解决方案:

    从窗口菜单创建REPL有三种方法 . 不要使用其中任何一个,而是右键单击项目并“启动项目REPL” . 现在相应地设置路径 .

  • 2

    我的第一个建议是从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" 之类的东西 .

相关问题