boot-clj watch build - >运行jar - ok - >改变代码 - >运行jar - 失败:找不到类

时间:2016-11-22 10:45:53

标签: clojure boot-clj

我使用boot build watch命令构建jar,然后我可以使用java -jar target/project.jar命令成功执行它。源代码更改和重建后,执行失败并显示消息

Caused by: java.io.FileNotFoundException: Could not locate my_dir/foo__init.class or my_dir/foo.clj on classpath. Please check that namespaces with dashes use underscores in the Clojure file name.

我有以下文件结构

.
├── build.boot
└── src
    └── my_dir
        ├── core.clj
        └── foo.clj

build.boot 内容:

#!/usr/bin/env boot
(set-env!
 :source-paths #{"src"}
 :dependencies '[[org.clojure/clojure "1.8.0"]])

(deftask build
  "Builds an uberjar of that can be run with java -jar"
  []
  (comp
   (aot :all true)
   (pom :project 'boottest
        :version "0.0.1")
   (uber)
   (jar :main 'my-dir.core)
   (target :dir #{"target"})))

foo.clj 内容:

(ns my-dir.foo)
(defn f []
  (println "I am f"))

core.clj 内容:

(ns my-dir.core
  (:gen-class)
  (:require [my-dir.foo :as foo]))

(defn -main [& args]
  (println "first run")
  (foo/f))

现在我已boot build watch正在运行,当我将 core.clj 的内容更改为例如(println "second run"),等待重建并运行生成的project.jar我得到无法找到上面提到的类错误。最后,通过boot build命令手动重建代码并重新运行,但我想用boot watch build进行操作,我完全不明白为什么不能这样做。我完全是新手,所以我可能会遗漏一些明显但仍想知道的东西。有什么想法吗?

启动版

http://boot-clj.com
Tue Nov 22 11:35:59 CET 2016
BOOT_CLOJURE_NAME=org.clojure/clojure
BOOT_CLOJURE_VERSION=1.8.0
BOOT_VERSION=2.6.0

0 个答案:

没有答案
相关问题