Clojure 获取uberjar中嵌入资源的列表
我正在与leiningen和Clojure合作创建一个uberjar,这样我就有了一个用于部署的文件。我还使用leiningen的默认资源路径嵌入了一些静态文件,它们的名称和数量因版本而异。有没有一种惯用的方法从Clojure获取嵌入式资源列表?我知道我可以使用Clojure 获取uberjar中嵌入资源的列表,clojure,leiningen,Clojure,Leiningen,我正在与leiningen和Clojure合作创建一个uberjar,这样我就有了一个用于部署的文件。我还使用leiningen的默认资源路径嵌入了一些静态文件,它们的名称和数量因版本而异。有没有一种惯用的方法从Clojure获取嵌入式资源列表?我知道我可以使用clojure.java.io/resource访问一个已知的文件名,但是如何获取文件列表?下面的列表资源函数返回jar中路径中的所有文件的列表running jar保存当前运行的jar的路径(如果它实际上是一个jar) (def ^:p
clojure.java.io/resource
访问一个已知的文件名,但是如何获取文件列表?下面的列表资源
函数返回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))
太好了,谢谢。我们最终完全放弃了这个想法,在没有嵌入式资源的情况下做了一些事情。这就是说,我事先测试了这个,结果非常好。再次感谢。