首页 文章

clojure classpath(?)麻烦加载与leiningen的代码和依赖关系

提问于
浏览
2

我是一个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,否则使用失败 . 那么这是否意味着我的类路径以某种方式设置错误?如何修复这样的事情?

Second problem

好的,现在我正在尝试实际使用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:找不到类路径上的clojure / core / matrix__init.class或clojure / core / matrix.clj:,编译:(/ Users / pauliglot / github / blabber / src / blabber / core.clj: 1:1)

我'm using Leiningen 2.5.1 on Java 1.8.0_45. And I'正好在核心 . 矩阵的getting started guide之后 .

所以发生了什么事?为什么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上/多嘴/目标/类:/Users/pauliglot/.m2/repository/clj-fuzzy/clj-fuzzy/0.1.8/clj-fuzzy-0.1.8.jar:/Users/pauliglot/.m2/库/雪球词干/雪球词干/ 0.1.0 /雪球词干-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的/谷歌封库的第三方/ 0.0-20140226-71326067 /谷歌封库,第三方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-库0.0-20140226-71326067.jar:/Users/pauliglot/.m2/repository/or克/ Mozilla浏览器/犀牛/ 1.7R4 /犀牛-1.7R4.jar:/Users/pauliglot/.m2/repository/org/json/json/20090211/json-20090211.jar:/Users/pauliglot/.m2/repository/净/ 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:/用户/ 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

Edit 这是目录树:| blabber | -doc | -resources | -src | --- blabber | -target | --- classes | ----- META-INF | ------- maven | -------- -blabber | ----------- blabber | --- stale | -test

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

1 回答

  • 2

    类路径是Java概念; Leiningen应该正确设置类路径 . 我怀疑是目录,文件名之间存在不匹配,或命名空间声明 . 文件路径应该是 <name passed to 'lein new'>/src/blabber/core.clj. 这不是't clear from what you wrote whether that'的情况 . 首先尝试运行 lein deps ,但您不需要这样做 . 这和 lein repl 通常从目录运行,即项目根目录 . 您可能需要在project.clj中使用 :source-paths:main ,但我不这么认为 .

    (use 'clojure.core.matrix) 应该有效 . 对我有用,例如同

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

相关问题