我用命令构建 jar,boot build watch
然后我能够用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的内容更改为 eg(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