当前位置: 首页 > 知识库问答 >
问题:

在emacs/cider中打开leiningen项目会引发类路径错误

锺离刚洁
2023-03-14

我正在学习《Clojure for the Brave and True》一书中的Clojure,并使用emacs、苹果酒和leiningen。我已经创建了一个项目。

lein new app the-divine-cheese-code

然后我将源文件添加到项目中。

神圣奶酪代码\src\u神圣奶酪\u代码\core。clj神圣奶酪代码\src\the_神圣奶酪\u代码\visualization\svg。clj

在core.clj中,我指的是svg.clj命名空间。

##############################################################################################

(ns the-divine-cheese-code.core)
;; Ensure that the SVG code is evaluated
(require 'the-divine-cheese-code.visualization.svg)
;; Refer the namespace so that you don't have to use the 
;; fully qualified name to reference svg functions
(refer 'the-divine-cheese-code.visualization.svg)

(def heists [{:location "Cologne, Germany"
              :cheese-name "Archbishop Hildebold's Cheese Pretzel"
              :lat 50.95
              :lng 6.97}
             {:location "Zurich, Switzerland"
              :cheese-name "The Standard Emmental"
              :lat 47.37
              :lng 8.55}
             {:location "Marseille, France"
              :cheese-name "Le Fromage de Cosquer"
              :lat 43.30
              :lng 5.37}
             {:location "Zurich, Switzerland"
              :cheese-name "The Lesser Emmental"
              :lat 47.37
              :lng 8.55}
             {:location "Vatican City"
              :cheese-name "The Cheese of Turin"
              :lat 41.90
              :lng 12.45}])

(defn -main
  [& args]
  (println (points heists)))

神圣奶酪代码\src\u神圣奶酪\u代码\visualization\svg。clj

(ns the-divine-cheese-code.visualization.svg)

(defn latlng->point
  "Convert lat/lng map to comma-separated string" 
  [latlng]
  (str (:lat latlng) "," (:lng latlng)))

(defn points
  [locations]
  (clojure.string/join " " (map latlng->point locations)))

这是项目的整个dir结构。

the-divine-cheese-code              
the-divine-cheese-code\.gitignore               
the-divine-cheese-code\.hgignore                
the-divine-cheese-code\.nrepl-port              
the-divine-cheese-code\CHANGELOG.md             
the-divine-cheese-code\doc              
the-divine-cheese-code\doc\intro.md             
the-divine-cheese-code\LICENSE              
the-divine-cheese-code\project.clj              
the-divine-cheese-code\README.md                
the-divine-cheese-code\resources                
the-divine-cheese-code\src              
the-divine-cheese-code\src\the_divine_cheese_code               
the-divine-cheese-code\src\the_divine_cheese_code\core.clj              
the-divine-cheese-code\src\the_divine_cheese_code\visualization             
the-divine-cheese-code\src\the_divine_cheese_code\visualization\svg.clj             
the-divine-cheese-code\target               
the-divine-cheese-code\target\default               
the-divine-cheese-code\target\default\classes               
the-divine-cheese-code\target\default\classes\META-INF              
the-divine-cheese-code\target\default\classes\META-INF\maven                
the-divine-cheese-code\target\default\classes\META-INF\maven\the-divine-cheese-code             
the-divine-cheese-code\target\default\classes\META-INF\maven\the-divine-cheese-code\the-divine-cheese-code              
the-divine-cheese-code\target\default\classes\META-INF\maven\the-divine-cheese-code\the-divine-cheese-code\pom.properties
the-divine-cheese-code\target\default\repl-port             

the-神圣-奶酪-代码\目标\默认\stale
the-神圣-奶酪-代码\目标\默认\stale\leiningen.core.classpath.extract-本地-依赖
the-神圣-奶酪-代码\test
the-神圣-奶酪-代码\test\the_divine_cheese_code
the-神圣-奶酪-代码\test\the_divine_cheese_code\core_test.clj

当我使用“lein run”运行项目时,它会成功执行。然而,当我打开核心时。用emacs/cider编译clj文件,我得到了类路径错误。

CompilerException java.io.FileNotFoundException: Could not locate 
the_divine_cheese_code/visualization/svg__init.class or 
the_divine_cheese_code/visualization/svg.clj on classpath. Please check 
that namespaces with dashes use underscores in the Clojure file name., 
compiling:(c:/temp/the-divine-cheese-code/src/the_divine_cheese_code/core.clj:2:1)

如果我把源代码放在同一个目录中(相应地改变命名空间),CIDER就能成功地编译源代码。

(ns the-divine-cheese-code.core)
(require 'the-divine-cheese-code.svg)
(refer 'the-divine-cheese-code.svg)

(def heists [{:location "Cologne, Germany"
    ...

因此,也许这个问题与操作系统有关。我使用Windows7,它不是Emacs/CIDER的主要操作系统。

经过一些实验,我发现苹果酒在没有:参考

(ns the-divine-cheese-code.core
  (:require [the-divine-cheese-code.visualization.svg]))

这看起来像是一个苹果酒错误,“lein run”在这种情况下会出现错误。如果我走对了路

(ns the-divine-cheese-code.core
  (:require [the-divine-cheese-code.visualization.svg :refer :all]))

苹果酒现在会出现另一个错误:

Caused by java.lang.IllegalStateException
latlng->point already refers to:
#'the-divine-cheese-code.svg/latlng->point in namespace:
the-divine-cheese-code.core

共有2个答案

韦欣德
2023-03-14

在我的例子中,在我重新命名(同名)src/the_divide\u cheese\u code/文件夹及其内容后,错误就消失了。

不确定是什么导致了这个问题。我猜是字符编码搞砸了。我在Emacs中创建了文件和文件夹,并在Double Commander中完成了重命名。

东方森
2023-03-14

建议使用ns宏提供的选项,而不是裸requirerefere语句-这是在Clojure中执行导入/requires的推荐方法,并且大多数工具的编写都考虑了这种管理名称空间的方法。即使以下代码在苹果酒中仍然不起作用,也会更容易诊断:

;; the-divine-cheese-code\src\the_divine_cheese_code\core.clj

(ns the-divine-cheese-code.core
  (:require [the-divine-cheese-code.visualization.svg :refer :all]))

(def heists ...)

(defn- main ...)
 类似资料:
  • 我有3个项目,ProjectB,ProjectC。 当我构建ProjectB时,它没有任何问题。但是当我试图构建ProjectA时,它在控制台上出现以下错误而失败。 评估项目“:ProjectB”时出现问题。在项目:ProjectB中找不到路径为:ProjectC的项目。 build.gradle-ProjectC settings.gradle-ProjectC build.gradle - 项

  • 问题内容: 我在测试类中使用以下代码,以将所有spring.xml文件加载到classpath和application-content.xml文件中。 有没有一种方法可以打印classpath中所有“ spring.xml”文件的路径?我有一些jar文件,其中包含spring.xml。但是,其中一些可能不需要运行测试。有没有办法打印它们(jar文件或路径)并删除程序上不需要的spring.xml文

  • Leiningen + Figwheel + Emacs 配置 Lein 通过命令行启动, 通过 project.clj 文件配置. project.clj 实际上是一个 Clojure 脚本, 运行时被读取. Emacs C-x C-e eval last cljs sexp 的配置 1.在 project.clj 文件里面的 :dependencies 引入 :dependencies [ .

  • 我正在尝试使用node-java包。我需要从node.js运行小的java代码。首先,我运行命令

  • 问题内容: 我收到这个错误 错误:java:致命错误:在类路径或引导类路径中找不到包java.lang 当我尝试构建/编译 任何 项目时,在IntelliJ中使用。这里应该说明的是,NetBeans,Eclipse甚至javac命令行都可以编译,构建和执行同一项目而不会出错。这就是为什么我怀疑问题出在IntelliJ上,其他所有IDE都可以正常工作的原因。 在IntelliJ中,我已经: 重新启动

  • 本文向大家介绍Java eclipse项目中项目的类路径是什么?,包括了Java eclipse项目中项目的类路径是什么?的使用技巧和注意事项,需要的朋友参考一下 您可以使用构建路径在eclipse项目中包含需要设置类路径的Jar文件 步骤1- 右键单击项目选择构建路径→配置构建路径。 步骤2-选择库,选择添加外部JAR ...按钮。 步骤3-然后浏览所需的jar文件所在的文件夹,选择它们并按打开