首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >clojure类路径(?)使用leiningen加载代码和依赖项时遇到问题

clojure类路径(?)使用leiningen加载代码和依赖项时遇到问题
EN

Stack Overflow用户
提问于 2016-03-17 03:27:19
回答 1查看 2.4K关注 0票数 2

我是Clojure和JVM的初学者,构建工具让我有点困惑,所以请原谅我将要执行的愚蠢。我不知道什么是“类路径”.我只想要一个有很多库的Lisp!

但我试图用Clojure编写一段简单的文本挖掘代码,但我似乎无法让它正常工作。

有两个问题,我认为它们是相关的,可能都与javaland中的类路径有关,而且没有一本Clojure入门书能解释这些问题。

我用lein new启动了这个项目,我的project.clj有以下依赖关系:

代码语言:javascript
复制
 :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调用如下:

代码语言:javascript
复制
(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的第一行更改为:

代码语言:javascript
复制
(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中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)应该能工作。为我工作,例如

代码语言:javascript
复制
(defproject blabber "0.1.0-SNAPSHOT"
  :dependencies [[org.clojure/clojure "1.8.0"]
  [net.mikera/core.matrix "0.50.0"]]). 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36051140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档