1

在我拥有的 .clj 文件中(使用 '(incanter core io ...))。尝试评估该代码时会发生此错误:FileNotFoundException 无法在类路径上找到 clojure/core/matrix__init.class 或 clojure/core/matrix.clj:clojure.lang.RT.load (RT.java:443)。如果我将代码更改为:(使用'(incanter)),那么一切都可以,除了没有必要的命名空间可用,这是可以预料的。在过去的 18 个月里,我一直非常愉快地使用带有 clojure 插件的 jEdit,并仔细验证了我的类路径是正常的。我尝试(使用'...math.combinatorics)和csv & json jars(这些都正常)来合理地确定这不是jEdit配置问题。我在 clojure/core jar 中寻找“矩阵”,但没有找到。非常感谢解决此问题的任何帮助。

经过进一步调查:我想我已经找到了我的问题的根源:在 clatrix-0.3.0 命名空间声明中需要 clojure.core.matrix。当我从类路径中删除 clatrix 并评估(使用'(incanter core ...))时,会发生此错误: FileNotFoundException Could not locate clatrix/core__init.class or clatrix/core.clj on classpath: clojure.lang.RT.load ( RT.java:443)。将 clatrix 添加到类路径时,会发生我原来的错误(即找不到 clojure.core.matrix)。Incanter-core 确实有一个 Matrix.class 文件。似乎 incanter 依赖于 clatrix,而 clatrix 又依赖于 clojure.core。不存在的矩阵。如何解决这个问题或有解决方法?

4

1 回答 1

3

这里的问题是您没有为您的库提供传递依赖项。clojure.core.matrix 不是 clojure.core 的一部分。显然,Jedit 用于运行 Clojure 的任何方法都不会为您检测或解决您的依赖关系。

虽然这种依赖关系解析可以手动完成,但它是一项不易出错且耗时较少的任务,让 leiningen 在开发期间解决您的依赖关系并设置您的类路径,并使用该lein repl任务在开发期间启动您的交互式 repl。Lein repl 启动一个 nrepl 服务器,它有一个定义良好的 API,多个编辑器/编程环境可以连接到该 API。一个好的 clojure 开发编辑器应该提供一些连接到 nrepl 服务器的方法。

于 2014-01-24T22:53:49.220 回答