clojure classpath(?) 无法使用 leiningen 加载代码和依赖项
clojure classpath(?) troubles loading code and dependencies with leiningen
我是 Clojure 和 JVM 初学者,构建工具对我来说有点混乱,所以请原谅我即将执行的愚蠢操作。我实际上并不知道 "classpath" 是什么……我只想要一个有很多库的 Lisp!
但我正在尝试用 Clojure 编写一些简单的文本挖掘代码,但似乎无法正常工作。
有两个问题,我认为它们是相关的,都可能与来自 javaland 的类路径相关,none 介绍性的 Clojure 书籍似乎对此进行了解释。
我用 lein new
启动了项目,我的 project.clj 有以下依赖项:
: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调用如下:
(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 改为:
(ns blabber.core
(:require
[clojure.string :refer [lower-case split]]
[clojure.walk :refer [keywordize-keys]]
[clojure.core.matrix :refer [dataset]]))
当我第一次用这个 project.clj 开始 repl 但没有 :require
到 core.matrix 时,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。我只是关注 getting started guide 的 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/blabber/core.clj
类路径是一个Java概念; Leiningen 应该正确设置类路径。我怀疑目录、文件名或命名空间声明之间存在不匹配。文件路径应该是 <name passed to 'lein new'>/src/blabber/core.clj.
从你写的内容看不清楚是否是这种情况。也先尝试 运行ning lein deps
,但您不需要这样做。这个和lein repl
通常是运行所在目录,即项目根目录。您可能需要 :source-paths
或 :main
in project.clj,但我不这么认为。
(use 'clojure.core.matrix)
应该可以。为我工作,例如与
(defproject blabber "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.8.0"]
[net.mikera/core.matrix "0.50.0"]]).
我是 Clojure 和 JVM 初学者,构建工具对我来说有点混乱,所以请原谅我即将执行的愚蠢操作。我实际上并不知道 "classpath" 是什么……我只想要一个有很多库的 Lisp!
但我正在尝试用 Clojure 编写一些简单的文本挖掘代码,但似乎无法正常工作。
有两个问题,我认为它们是相关的,都可能与来自 javaland 的类路径相关,none 介绍性的 Clojure 书籍似乎对此进行了解释。
我用 lein new
启动了项目,我的 project.clj 有以下依赖项:
: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调用如下:
(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 改为:
(ns blabber.core
(:require
[clojure.string :refer [lower-case split]]
[clojure.walk :refer [keywordize-keys]]
[clojure.core.matrix :refer [dataset]]))
当我第一次用这个 project.clj 开始 repl 但没有 :require
到 core.matrix 时,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。我只是关注 getting started guide 的 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/blabber/core.clj
类路径是一个Java概念; Leiningen 应该正确设置类路径。我怀疑目录、文件名或命名空间声明之间存在不匹配。文件路径应该是 <name passed to 'lein new'>/src/blabber/core.clj.
从你写的内容看不清楚是否是这种情况。也先尝试 运行ning lein deps
,但您不需要这样做。这个和lein repl
通常是运行所在目录,即项目根目录。您可能需要 :source-paths
或 :main
in project.clj,但我不这么认为。
(use 'clojure.core.matrix)
应该可以。为我工作,例如与
(defproject blabber "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.8.0"]
[net.mikera/core.matrix "0.50.0"]]).