1

我用命令构建 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
4

0 回答 0