Clojure的:require和Instaparse

时间:2013-07-02 17:44:05

标签: clojure classpath dependency-management leiningen

我正在尝试将instaparse lib用于我的clojure项目。我在项目依赖项中使用了leiningen 2.0和clojure 1.5.1。我将instaparse添加到我的项目依赖项中,如下所示:

(defproject bachelor "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]
         [org.clojure/clojure-contrib "1.2.0"]
         [instaparse "1.1.0"]])

这是我的来源,我正在尝试要求lib:

(ns bachelor.data
  (:require [clojure.string :as str])
  (:require [instaparse.core :as insta])
  (:use [clojure.contrib.generic.math-functions])
  )

当我尝试编译时,我收到以下错误消息:

  

cd c:/bachelor/src/bachelor.data/ 1编译器说明:

     

未知位置:错误:java.io.FileNotFoundException:无法   找到instaparse / core__init.class或instaparse / core.clj   classpath:

     

company.clj:1:1:错误:java.io.FileNotFoundException:无法   找到instaparse / core__init.class或instaparse / core.clj   classpath:(company.clj:1)

     

编译失败。

我检查了我的项目的classpath,我认为应该在那里找到instaparse。

  

lein classpath

     

C:\本科\测试; C:\本科\ SRC; C:\本科\ DEV-资源; C:\本科\资源; C:\本科\目标\类; C:\用户\ Maciej.m2 \库\ instaparse \ instaparse \ 1.1.0 \ instaparse-1.1.0.jar; C:\用户\的Mac   iej.m2 \库\有机\ Clojure的\ Clojure的-的contrib \ 1.2.0 \ Clojure的-的contrib-1.2.0.jar; C:\用户\ Maciej.m2 \库\有机\ Clojure的\ Clojure的\ 1.5.1 \ Clojure的-1.5.1.jar

知道我做错了什么吗?

更新

我更新了lein classpath的结果。早些时候,我已经粘贴了旧的结果。

2 个答案:

答案 0 :(得分:2)

这是一个工作示例项目:

project.clj:

(defproject parse "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies [[org.clojure/clojure "1.5.1"]
                 [instaparse "1.1.0"]])

你不需要contrib的行,而string现在已经内置到clojure中了。

的src /解析/ core.clj:

(ns parse.core
  (:require [instaparse.core :as insta]
            [clojure.string :as str]))
(def as-and-bs
  (insta/parser
   "S = AB*
     AB = A B
     A = 'a'+
     B = 'b'+"))

REPL:

#<Namespace parse.core>
parse.core>  (as-and-bs "aaaaabbbaaaabb")
[:S [:AB [:A "a" "a" "a" "a" "a"] [:B "b" "b" "b"]] [:AB [:A "a" "a" "a" "a"] [:B "b" "b"]]]
parse.core> (str/join "," ["a" "b" "c"])                                                                                                                                  
"a,b,c" 

我的Liningen奇怪解决方案清单:

  • 运行lein deps并重新启动nrepl / emacs
  • lein clean并重新启动nrepl / emacs
  • 删除本地libs目录(lein v1.x)
  • 删除我的本地maven存储库并运行lein deps

答案 1 :(得分:0)

我发现了什么是错的。我正在与leiningen创建项目,但是使用Clojure-box或Clooj开发源代码。我也试图用这些工具编译我的源码,这是错误的。当你运行这样的IDE时,它加载了自己的类路径,这就是为什么它找不到我想要使用的库。现在我用

编译我的src
  

lein compile

并在

中运行
  

lein repl

一切都运转良好。