我正在与leiningen和Clojure合作创建一个uberjar,所以我有一个文件可供部署。我还使用leiningen的默认资源路径嵌入了一些静态文件,其名称和编号因构建而异。有没有一种惯用的方法来获取Clojure的嵌入资源列表?我知道我可以使用clojure.java.io/resource
来访问已知的文件名,但是如何获取文件列表呢?
答案 0 :(得分:8)
以下list-resources
函数返回path
中jar中所有文件的列表。 running-jar
保存当前正在运行的jar的路径,如果它实际上是一个jar。
(def ^:private running-jar
"Resolves the path to the current running jar file."
(-> :keyword class (.. getProtectionDomain getCodeSource getLocation getPath)))
(defn list-resources [path]
(let [jar (java.util.jar.JarFile. path)
entries (.entries jar)]
(loop [result []]
(if (.hasMoreElements entries)
(recur (conj result (.. entries nextElement getName)))
result))))
(take 10 (list-resources running-jar))