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))

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