设置类路径并从书籍中访问代码:编程Clojure

3

我正在学习《Programming Clojure》,最近从书籍官方网站下载了代码。对于其他的工具,例如 (require 'clojure.contrib.str-utils) 是可以使用的。但是如何加载书中的代码呢?(require 'examples.introduction) 抛出以下异常:

java.io.FileNotFoundException: Could not locate examples/ introduction__init.class or examples/introduction.clj on classpath:
(NO_SOURCE_FILE:0)
  [Thrown class clojure.lang.Compiler$CompilerException]

Here is the full backtrace:

Backtrace:
  0: clojure.lang.Compiler.eval(Compiler.java:4543)
  1: clojure.core$eval__3990.invoke(core.clj:1728)
  2: swank.commands.basic$eval_region__686.invoke(basic.clj:36)
  3: swank.commands.basic$listener_eval__695.invoke(basic.clj:50)
  4: clojure.lang.Var.invoke(Var.java:346)
  5: user$eval__1200.invoke(NO_SOURCE_FILE)
  6: clojure.lang.Compiler.eval(Compiler.java:4532)
  7: clojure.core$eval__3990.invoke(core.clj:1728)
  8: swank.core$eval_in_emacs_package__307.invoke(core.clj:55)
  9: swank.core$eval_for_emacs__384.invoke(core.clj:123)
 10: clojure.lang.Var.invoke(Var.java:354)
 11: clojure.lang.AFn.applyToHelper(AFn.java:179)
 12: clojure.lang.Var.applyTo(Var.java:463)
 13: clojure.core$apply__3243.doInvoke(core.clj:390)
 14: clojure.lang.RestFn.invoke(RestFn.java:428)
 15: swank.core$eval_from_control__310.invoke(core.clj:62)
 16: swank.core$eval_loop__313.invoke(core.clj:67)
 17: swank.core$spawn_repl_thread__445$fn__476$fn__478.invoke(core.clj:
173)
 18: clojure.lang.AFn.applyToHelper(AFn.java:171)
 19: clojure.lang.AFn.applyTo(AFn.java:164)
 20: clojure.core$apply__3243.doInvoke(core.clj:390)
 21: clojure.lang.RestFn.invoke(RestFn.java:428)
 22: swank.core$spawn_repl_thread__445$fn__476.doInvoke(core.clj:170)
 23: clojure.lang.RestFn.invoke(RestFn.java:402)
 24: clojure.lang.AFn.run(AFn.java:37)
 25: java.lang.Thread.run(Unknown Source)

我正在尝试在Windows XP上使用NetBeans中的Clojure Box和Enclojure。 这是一个类路径问题吗?我应该把包含书中代码的文件夹放在哪里?请帮我设置好变量环境。


我建议也加上Java标签。 - James P.
2个回答

3
这本书建议您使用bin目录中的脚本。如果您阅读repl.shrepl.bat,它们会告诉您需要将哪些内容放在类路径上才能使一切正常工作。如果您在为Clojure设置类路径或理解路径结构与命名空间名称结构之间的对应关系方面遇到问题,则有许多关于此的问题在SO上得到了解释;例如,请参见我在这里的答案。(如何告诉Java使用哪个类路径的基础知识取决于您如何启动它,请查看NetBeans文档以获取更多信息。)
简而言之,我建议您从repl.sh/repl.bat中获取类路径,并在通过您选择的方法启动REPL时使用该类路径。或者只需使用适当的脚本(在您的情况下是.bat版本)启动REPL即可。
最后,只要您相应地设置了类路径,代码放在哪里都无所谓。

2
我正在使用Enclojure和NetBeans学习编程Clojure。为了使用Enclojure的REPL,我将书中代码中的JAR文件导入到我的Clojure项目中。这包括:
  1. lib/目录下除jline-0.9.94.jar以外的所有JAR文件
  2. 一个手动创建的JAR文件,其中包含examples/目录及其内容(如下图中的PCexamples.jar

Libraries folder in NetBeans


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接