2013-07-02 25 views
3

我想使用instaparse LIB我Clojure的項目。我在我的項目依賴項中使用了leiningen 2.0和clojure 1.5.1。我instaparse添加到我的項目依賴關係如下:Clojure的:需要和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 compiler notes:

Unknown location: error: java.io.FileNotFoundException: Could not locate instaparse/core__init.class or instaparse/core.clj on classpath:

company.clj:1:1: error: java.io.FileNotFoundException: Could not locate instaparse/core__init.class or instaparse/core.clj on classpath: (company.clj:1)

Compilation failed.

我檢查了我的項目的類路徑,我認爲應該在那裏找到instaparse。

lein classpath

C:\bachelor\test;C:\bachelor\src;C:\bachelor\dev-resources;C:\bachelor\resources;C:\bachelor\target\classes;C:\Users\Maciej.m2\repository\instaparse\instaparse\1.1.0\instaparse-1.1.0.jar;C:\Users\Mac iej.m2\repository\org\clojure\clojure-contrib\1.2.0\clojure-contrib-1.2.0.jar;C:\Users\Maciej.m2\repository\org\clojure\clojure\1.5.1\clojure-1.5.1.jar

有什麼想法我做錯了?

UPDATE

我更新的雷音類路徑的結果。此前,我粘貼了舊的結果。

+0

奇怪的是,您在您的項目中指定了Clojure 1.5.1,但它在您的lein類路徑輸出中具有clojure 1.4.0。此外,[Clojure Contrib已被棄用,您應該導入不同的模塊](http://dev.clojure.org/display/doc/Clojure+Contrib+Libraries)。 – noahlz

回答

0

我發現了什麼是錯誤的。我正在用leiningen創建項目,但是用Clojure-box或Clooj開發源代碼。我還試圖用這些工具編譯我的源代碼,但這是錯誤的。當你運行這樣的IDE時,它會加載自己的類路徑,這就是爲什麼它找不到我想要使用的庫。現在我編譯我的SRC與

lein compile

lein repl

運行它,一切都只是工作的罰款。

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線,現在字符串被內置到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陌生感分辨率清單:

  • 運行雷音DEPS並重新啓動nrepl/emacs的
  • 雷音乾淨,然後重新啓動nrepl/emacs的
  • 刪除本地庫目錄(雷音1.x版)
  • 刪除我的本地倉庫和運行雷音的DEP
+0

但我做了你所有的發佈,它沒有工作。你確定我不需要數學函數的貢獻嗎?我在計算中使用了pow函數。 – dzwonu

+2

來自Clojure <= 1.2.x的舊單片clojure-contrib完全死亡。它被分成許多部分,在不同的項目中維護。退房:http://dev.clojure.org/display/community/Where+Did+Clojure.Contrib+Go –

+0

我從依賴關係contrib和從源文件中刪除:使用它引用它,但我仍然有同樣的問題。 「FileNotFoundException找不到類路徑中的instaparse/core__init.class或instaparse/core.clj:clojure.lang.RT.load(RT.java:443)」 – dzwonu