以下は、現在混乱している REPL ( Light Table内) から実行しているコードです。
これはうまくいくようです:
(require '[clojure.java.classpath :as classpath])
(import '[java.io File])
(map #(File. (.toURI %))
(classpath/classpath))
結果:
(#<File C:\Documents%20and%20Settings\Kenny\My%20Documents\hello-heroku-clojure-world\test>
#<File C:\Documents%20and%20Settings\Kenny\My%20Documents\hello-heroku-clojure-world\src>
#<File C:\Documents%20and%20Settings\Kenny\My%20Documents\hello-heroku-clojure-world\dev-resources>
#<File C:\Documents%20and%20Settings\Kenny\My%20Documents\hello-heroku-clojure-world\resources>
#<File C:\Documents%20and%20Settings\Kenny\My%20Documents\hello-heroku-clojure-world\target\classes>
...
しかし、次の例は、どのファイルもディレクトリではないことを示しているようです。
(filter #(.isDirectory (File. (.toURI %)))
(classpath/classpath))
結果:
()
編集- 以下は、私が混乱しているコードのより単純なバージョンであると確信しています。同じ結果が生成されます。
(filter #(.isDirectory %)
(classpath/classpath))
ただし、これはうまくいくようです:
(filter #(.isDirectory (File. (URLDecoder/decode (.getPath %))))
(classpath/classpath))
結果:
(#<File C:\Documents%20and%20Settings\Kenny\My%20Documents\hello-heroku-clojure-world\test>
#<File C:\Documents%20and%20Settings\Kenny\My%20Documents\hello-heroku-clojure-world\src>
#<File C:\Documents%20and%20Settings\Kenny\My%20Documents\hello-heroku-clojure-world\resources>
#<File C:\Documents%20and%20Settings\Kenny\My%20Documents\hello-heroku-clojure-world\target\classes>)
[クラスパス内の他のすべてのファイルは JAR ファイルです。]
編集- これを Windows XP で実行しています。
編集- 確かにこれはパスとスペースの問題です。私は以下を実行しました:
(filter #(.exists %)
(classpath/classpath))
結果:
()
からの関連コードclojure.java.classpath
:
(defn loader-classpath
"Returns a sequence of File paths from a classloader."
[loader]
(when (instance? java.net.URLClassLoader loader)
(map io/as-file (.getURLs ^java.net.URLClassLoader loader))))