我使用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