获取uberjar中的嵌入资源列表

时间:2014-03-12 20:25:17

标签: clojure leiningen

我正在与leiningen和Clojure合作创建一个uberjar,所以我有一个文件可供部署。我还使用leiningen的默认资源路径嵌入了一些静态文件,其名称和编号因构建而异。有没有一种惯用的方法来获取Clojure的嵌入资源列表?我知道我可以使用clojure.java.io/resource来访问已知的文件名,但是如何获取文件列表呢?

1 个答案:

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