运行uberjar时的Clojure FileNotFound异常,尽管文件在项目源中

时间:2014-04-12 22:50:27

标签: clojure compilation namespaces

我正在试着解决以下错误:

Exception in thread "main" java.io.FileNotFoundException: Could not locate composer/midi/short_message__init.class or composer/midi/short_message.clj on classpath: , compiling:(events.clj:12:1)

short-message的引用位于events.clj

的名称空间声明中
(ns composer.ui.events
  (:use [seesaw core border chooser])
  (:require [composer.midi
             [io :as io]
             [time :as time]
             [player :as player]
             [short-message :as short]]))

以下是short-messageshort-message.clj本身的命名空间声明:

(ns composer.midi.short-message
  (:require [composer.algorithm.transform :refer :all]
            [composer.algorithm.markov.transform :refer :all]
            [composer.midi [io :refer :all] [message :as message]]))

short-messagecomposer.midi中的所有其他文件位于同一目录中,但这似乎是唯一导致问题的文件。实际上,在验证项目中的target目录之后,这是唯一一个似乎不包含相应类文件的命名空间。我认为这可能是代码的错误,但是如果我尝试在REPL中使用(load-file "src/composer/midi/short-message.clj")加载文件我没有任何问题。

1 个答案:

答案 0 :(得分:1)

您的评论是对的。在命名空间中,命名空间中的破折号对应于文件名中的下划线。所以你的文件名应该是你发现的short_message.clj。