Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Enclojure REPL在加载时找不到依赖的clj文件_Clojure_Enclojure - Fatal编程技术网

Enclojure REPL在加载时找不到依赖的clj文件

Enclojure REPL在加载时找不到依赖的clj文件,clojure,enclojure,Clojure,Enclojure,我对Enclojure REPL和使用它的clojure模块有问题。Load/Change REPL to file/ns可以很好地处理一个孤立的clojure文件,但如果一个文件引用了另一个clojure文件(我试图从我的项目中使用该文件),则会中断 具体步骤如下: 创建一个新项目。 创建clojure模块foobar.clj命名空间com.acme.foobar 定义一个在foobar.clj中返回值的函数: ns com.acme.foobar :使用com.acme.othermodul

我对Enclojure REPL和使用它的clojure模块有问题。Load/Change REPL to file/ns可以很好地处理一个孤立的clojure文件,但如果一个文件引用了另一个clojure文件(我试图从我的项目中使用该文件),则会中断

具体步骤如下:

创建一个新项目。 创建clojure模块foobar.clj命名空间com.acme.foobar 定义一个在foobar.clj中返回值的函数:

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

defn myfunc1[] a

打开一个netbeansiderepl

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

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

com.acme.foobar=>myfunc1 a

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

创建新的clojure模块othermodule.clj

ns com.acme.othermodule

来自其他模块的defn[] b

现在,请尝试从foobar.clj调用:

defn myfunc2[] 来自其他模块

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

将REPL更改为文件/ns 负载 为了使REPL意识到它应该能够运行新的模块

我对foobar.clj做了同样的事情,它现在引用了othermodule.clj,但我得到: CompilerException java.io.FileNotFoundException:在类路径上找不到com/acme/othermodule\u init.class或com/acme/othermodule.clj:无源文件:50 com.acme.foobar=>

此错误消息来自Change REPL to file/ns和Load

我错过了什么?我应该做一些其他的技巧来实现这一点吗?即使是运行->清理并构建主项目这一绝望的措施也无济于事,这当然会让REPL业务非常痛苦


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

我的第一个建议是从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


从google group中获得了正确的解决方案:

有三种方法可以从窗口菜单创建REPL。不要使用这些,对吗
单击项目并启动Project REPL。现在路径已相应设置。

谢谢!这个想法甚至没有出现在我的脑海中,尽管我在开源后将它安装到了我的工作机器上。我一定要试试。我也会试试你的NetBeans技巧,尽管如果我不能使用上下文菜单的文件加载选项,可用性会受到很大的影响。这很尴尬:原来这个想法是带有lib目录的。嘿,我很高兴你得到了正确的答案。