【问题标题】:Why do incanter, other than incanter itself, namespaces expecting clojure/core/matrix class or .clj?为什么除了 incanter 本身之外,命名空间还需要 clojure/core/matrix 类或 .clj?
【发布时间】:2014-01-24 17:20:49
【问题描述】:

在我拥有的 .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。不存在的矩阵。如何解决这个问题或有解决方法?

【问题讨论】:

  • clojure.core.matrix 不附带 clojure.core。
  • 另外,如果你使用leiningen来解析依赖并构建类路径,它会自动找到你的各种库需要的库。
  • 我使用 leiningen 进行完整构建。我发现 jEdit 是一个简单实用的编辑器,用于开发和测试 clojure 函数和模块。
  • 那你需要手动解决你的依赖。
  • 关于您的编辑:您仍然不明白。 Clojure.core.matrix 存在。我在上面链接到它。如果你使用 lein lein 会自动提供。如果您决定手动解决依赖关系,那么您需要找到它并将其放入类路径中。

标签: clojure jedit incanter


【解决方案1】:

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

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

【讨论】:

  • 希望 Alex Ott 能够阐明与上述问题相关的其他信息,因为这似乎与 Incanter 有关。
  • 没有。问题是它具有您没有提供的依赖项。咒语没有问题。您需要提供其依赖项,或使用自动提供它们的工具。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-04
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 2013-12-12
  • 2015-09-15
相关资源
最近更新 更多