0

以下は、現在混乱している 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))))
4

1 に答える 1