2014-03-12 12 views
3

我正在与leiningen和Clojure一起创建一个uberjar,因此我有一个部署文件。我还使用leiningen的默认资源路径嵌入了一些静态文件,这些文件的名称和编号因构建而异。有没有一种从Clojure获得嵌入式资源清单的习惯方法?我知道我可以使用clojure.java.io/resource来访问一个已知的文件名,但我怎样才能得到一个文件列表?获取uberjar中嵌入资源的列表

回答

6

以下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)) 
+0

非常好,谢谢。我们最终完全抛弃了这个想法,并且做了一些没有嵌入资源的事情。也就是说,我事先进行了测试,结果非常完美。再次感谢。 – WesleyJohnson