【问题标题】:Clojure's :require and InstaparseClojure 的 :require 和 Instaparse
【发布时间】:2013-06-30 05:10:46
【问题描述】:

我正在尝试将 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"]])

这就是我试图要求该库的来源:

(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 on 类路径:

company.clj:1:1: 错误: java.io.FileNotFoundException: 不能 找到 instaparse/core__init.class 或 instaparse/core.clj on 类路径:(company.clj:1)

编译失败。

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

lein 类路径

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

知道我做错了什么吗?

更新

我更新了 lein 类路径的结果。之前,我已经粘贴了旧结果。

【问题讨论】:

标签: clojure classpath dependency-management leiningen


【解决方案1】:

我发现出了什么问题。我正在使用 leiningen 创建项目,但使用 Clojure-box 或 Clooj 开发源代码。我还尝试使用该工具编译我的源代码,但这是错误的。当您运行这样的 IDE 时,它会加载自己的类路径,这就是为什么它找不到我想使用的库的原因。现在我用

编译我的 src

lein 编译

然后在里面运行

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/parse/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'+"))
    

    回复:

    #<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
    • 删除本地库目录 (lein v1.x)
    • 删除我的本地 maven 存储库并运行 lein deps

    【讨论】:

    • 但我做了你发布的所有内容,但没有成功。你确定我不需要数学函数的贡献吗?我在计算中使用 pow 函数。
    • 来自 Clojure dev.clojure.org/display/community/Where+Did+Clojure.Contrib+Go
    • 我从依赖项 contrib 和源文件 :use 中删除了它,但我仍然有同样的问题。 “FileNotFoundException 无法在类路径上找到 instaparse/core__init.class 或 instaparse/core.clj:clojure.lang.RT.load (RT.java:443)”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多