clojure classpath(?)难以使用leiningen加载代码和依赖项

clojure classpath(?) troubles loading code and dependencies with leiningen

我是Clojure和JVM的初学者,而构建工具令我有些困惑,因此请原谅我要执行的愚蠢行为。我实际上不知道什么是"类路径"……我只想要一个带有很多库的Lisp!

但是我试图在Clojure中编写一些简单的文本挖掘代码,但似乎无法使事情正常进行。

有两个问题,并且我认为它们是相关的,都可能与javaland中的classpath问题有关,而介绍性的Clojure书似乎都没有对此进行解释。

我从lein new开始了项目,而我的project.clj具有以下依赖关系:

1
2
3
4
 :dependencies [[org.clojure/clojure"1.6.0"]
                 [clj-fuzzy"0.1.8"]
                 [snowball-stemmer"0.1.0"]
                 [net.mikera/core.matrix"0.50.0"]])

和来自我的core.clj的相关ns调用如下:

1
2
3
4
(ns blabber.core
  (:require
    [clojure.string :refer [lower-case split]]
    [clojure.walk :refer [keywordize-keys]]))

我的目录结构是leiningen用于新库的默认设置。

第一个问题:

我从先前的SO中收集到,如果一切设置正确,则在调用(use 'blabber.core)之前不必在repl中调用(load-file"src/blabber/core.clj")即可获得我刚刚编写的代码。 (我从bash的src / blabber目录启动了lein repl)。但是,当我启动repl时,除非我先调用加载文件,否则使用将失败。那么这是否意味着我的类路径设置有误?以及如何解决这样的事情?

第二个问题:

好的,所以现在我正在尝试实际使用core.matrix。我的core.clj的第一行更改为:

1
2
3
4
5
(ns blabber.core
  (:require
    [clojure.string :refer [lower-case split]]
    [clojure.walk :refer [keywordize-keys]]
    [clojure.core.matrix :refer [dataset]]))

当我第一次使用此project.clj启动repl,但没有对core.matrix使用:require时,leiningen高兴地获取了core.matrix:Retrieving net/mikera/core.matrix/0.50.0/core.matrix-0.50.0.jar from clojars

但是,在将:require包含在实际代码中的core.matrix中并再次启动repl之后,在repl时,我调用(load-file"src/blabber/core.clj"),并得到以下错误:

CompilerException java.io.FileNotFoundException: Could not locate clojure/core/matrix__init.class or clojure/core/matrix.clj on classpath: , compiling:(/Users/pauliglot/github/blabber/src/blabber/core.clj:1:1)

我在Java 1.8.0_45上使用Leiningen 2.5.1。我只是遵循core.matrix入门指南。

所以发生了什么事? JVM为什么找不到我的东西?救我?谢谢!

如果有帮助,这是lein classpath输出的转储

/Users/pauliglot/github/blabber/test:/Users/pauliglot/github/blabber/src:/Users/pauliglot/github/blabber/dev-resources:/Users/pauliglot/github/blabber/resources:/Users/pauliglot/github/blabber/target/classes:/Users/pauliglot/.m2/repository/clj-fuzzy/clj-fuzzy/0.1.8/clj-fuzzy-0.1.8.jar:/Users/pauliglot/.m2/repository/snowball-stemmer/snowball-stemmer/0.1.0/snowball-stemmer-0.1.0.jar:/Users/pauliglot/.m2/repository/org/clojure/tools.macro/0.1.5/tools.macro-0.1.5.jar:/Users/pauliglot/.m2/repository/clojure-complete/clojure-complete/0.2.3/clojure-complete-0.2.3.jar:/Users/pauliglot/.m2/repository/org/clojure/google-closure-library-third-party/0.0-20140226-71326067/google-closure-library-third-party-0.0-20140226-71326067.jar:/Users/pauliglot/.m2/repository/com/google/protobuf/protobuf-java/2.4.1/protobuf-java-2.4.1.jar:/Users/pauliglot/.m2/repository/org/clojure/google-closure-library/0.0-20140226-71326067/google-closure-library-0.0-20140226-71326067.jar:/Users/pauliglot/.m2/repository/org/mozilla/rhino/1.7R4/rhino-1.7R4.jar:/Users/pauliglot/.m2/repository/org/json/json/20090211/json-20090211.jar:/Users/pauliglot/.m2/repository/net/mikera/core.matrix/0.50.0/core.matrix-0.50.0.jar:/Users/pauliglot/.m2/repository/com/google/javascript/closure-compiler/v20131014/closure-compiler-v20131014.jar:/Users/pauliglot/.m2/repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar:/Users/pauliglot/.m2/repository/org/clojure/clojurescript/0.0-2202/clojurescript-0.0-2202.jar:/Users/pauliglot/.m2/repository/args4j/args4j/2.0.16/args4j-2.0.16.jar:/Users/pauliglot/.m2/repository/org/clojure/tools.nrepl/0.2.6/tools.nrepl-0.2.6.jar:/Users/pauliglot/.m2/repository/com/google/guava/guava/15.0/guava-15.0.jar:/Users/pauliglot/.m2/repository/org/clojure/clojure/1.6.0/clojure-1.6.0.jar:/Users/pauliglot/.m2/repository/org/clojure/tools.reader/0.8.3/tools.reader-0.8.3.jar:/Users/pauliglot/.m2/repository/org/clojure/data.json/0.2.3/data.json-0.2.3.jar

编辑
这是目录树:
|笨拙的
|-文档
|-资源
| -src
| ---
|-目标
| ---班
| ----- META-INF
| -------行家
| ---------麻烦
| -----------
| ---陈旧
|-测试

我所有的代码都在blabber / src / blabber / core.clj中


类路径是Java概念。 Leiningen应该正确设置类路径。 我怀疑是目录,文件名或名称空间声明之间不匹配。 文件路径应为/src/blabber/core.clj.从您写的内容不清楚是否是这种情况。 也尝试先运行lein deps,但是您不需要这样做。 此文件和lein repl通常是从目录(即项目根目录)运行的。 您可能需要在project.clj中使用:source-paths:main,但是我认为不是。

(use 'clojure.core.matrix)应该起作用。 为我工作,例如 与

1
2
3
(defproject blabber"0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure"1.8.0"]
  [net.mikera/core.matrix"0.50.0"]]).