我是Clojure和JVM的初学者,构建工具让我有点困惑,所以请原谅我将要执行的愚蠢。我不知道什么是“类路径”.我只想要一个有很多库的Lisp!
但我试图用Clojure编写一段简单的文本挖掘代码,但我似乎无法让它正常工作。
有两个问题,我认为它们是相关的,可能都与javaland中的类路径有关,而且没有一本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为新库使用的默认设置。
First problem:
我从以前的所以中了解到,如果设置正确,那么在调用(use 'blabber.core)之前,不需要调用(load-file "src/blabber/core.clj")来获得我刚刚编写的代码。(我正在从bash中的src/blabber目录中启动lein repl )。但是当我启动repl时,除非我首先调用load-file,否则使用失败。那是不是意味着我的类路径设置错了?怎样才能解决这样的问题?
第二问题
好的,现在我正在尝试使用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时,莱宁根愉快地获得了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"),并获得以下错误:
compiling:(/Users/pauliglot/github/blabber/src/blabber/core.clj:1:1) CompilerException java.io.FileNotFoundException:无法找到classpath:,CompilerException__init.class或CompilerException/core/mesx.clj
我在Java 1.8.0_45上使用Leiningen2.5.1。我只是在跟踪入门指南 for 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
这是目录树: blabber -doc\s\src x--目标-类-META INF-maven
我的所有代码都在blabber/src/blabber/core.clj中。
发布于 2016-03-17 05:14:16
类路径是一个Java概念;Leiningen应该正确地设置类路径。我怀疑的是目录、文件名或命名空间声明之间存在不匹配。文件路径应该是<name passed to 'lein new'>/src/blabber/core.clj.,从您所写的内容中还不清楚是否是这样的。也尝试先运行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"]]). https://stackoverflow.com/questions/36051140
复制相似问题