コマンドで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))
これで実行中です。たとえば、 core.cljboot build watch
の内容を に変更すると、再構築を待って、結果の project.jar を実行すると、上記のクラス エラーが見つかりませんでした。最後に、コマンドを使用してコードを手動で再構築し、再実行することで機能しますが、それをやりたいのですが、なぜそのように機能しないのかまったくわかりません。私は起動するのがまったく初めてなので、明らかなことを見逃しているかもしれませんが、それでも知りたいです。何か案は?(println "second run")
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