にたまごほうれん草ブログ

はてなダイアリーから移行したブログ。以前のはこちら→http://d.hatena.ne.jp/emergent/

clojureコマンド実行時のclasspathにはカレントディレクトリ+'/src'を含む

ようなので、複数ファイルでオレオレライブラリを作りたい場合は、[ライブラリを使う側のファイルのpath]+/srcとなるディレクトリにオレオレライブラリの.cljファイルを置けば実行時に読み込んでくれるよ。

確認

classpathの表示は、(pprint (seq (.getURLs (java.lang.ClassLoader/getSystemClassLoader))))を使う*1

環境はMacOS 10.14.1、Clojure 1.9.0のreplを使って確認します。(ユーザ名だけhogeに変えてます)

$ pwd
/Users/hoge/dev
$ clj
Clojure 1.9.0
user=> (pprint (seq (.getURLs (java.lang.ClassLoader/getSystemClassLoader))))
(#object[java.net.URL 0x3a0baae5 "file:/Users/hoge/dev/src"]
 #object[java.net.URL 0xdb57326 "file:/Users/hoge/.m2/repository/org/clojure/clojure/1.9.0/clojure-1.9.0.jar"]
 #object[java.net.URL 0x4b14918a "file:/Users/hoge/.m2/repository/org/clojure/spec.alpha/0.1.143/spec.alpha-0.1.143.jar"]
 #object[java.net.URL 0x6d1ef78d "file:/Users/hoge/.m2/repository/org/clojure/core.specs.alpha/0.1.24/core.specs.alpha-0.1.24.jar"])
nil

1つ目のパスがそうなってますね。念のため手元のLinux(ラズパイ)でもやっておきます。

$ pwd
/home/moge/dev
$ clj
Clojure 1.9.0
user=> (pprint (seq (.getURLs (java.lang.ClassLoader/getSystemClassLoader))))
(#object[java.net.URL 0xfdd473 "file:/home/moge/dev/src"]
 #object[java.net.URL 0x1b365ed "file:/home/moge/.m2/repository/org/clojure/clojure/1.9.0/clojure-1.9.0.jar"]
 #object[java.net.URL 0xbada02 "file:/home/moge/.m2/repository/org/clojure/spec.alpha/0.1.143/spec.alpha-0.1.143.jar"]
 #object[java.net.URL 0x525575 "file:/home/moge/.m2/repository/org/clojure/core.specs.alpha/0.1.24/core.specs.alpha-0.1.24.jar"])
nil

おんなじですね。