Clojure 的 :require and Instaparse

标签 clojure classpath dependency-management leiningen

我正在尝试使用 instaparse我的 clojure 项目的 lib。我在我的项目依赖项中使用 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 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

知道我做错了什么吗?

更新

我更新了 lein 类路径的结果。早些时候,我粘贴了旧结果。

最佳答案

这是一个工作示例项目:

项目.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 陌生化解决 list :

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

关于Clojure 的 :require and Instaparse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17432282/

相关文章:

android - 在 Android 中管理库的依赖关系

jakarta-ee - EJB 模块无法从 glassfish 上的另一个 EJB 模块找到类

Clojure transient 示例 - 没有显着的加速

macros - 使用 gen-class 的 clojure 宏不会创建注释

java - 用于查找包中所有类的反射库

python - Bleeding Edge/Nightly Build Python 中的依赖管理。策略和最佳实践?

clojure - 从嵌套 map (和矢量)创建 HTML 表格

clojure - 如何在玩 Intellij Idea repl 之前准备依赖项?

java - 我正在运行 RMI 应用程序但没有安全管理器 : RMI class loader disabled exception comes

Java:在类路径上加载和编辑属性文件