3
我正在与leiningen和Clojure一起创建一个uberjar,因此我有一个部署文件。我还使用leiningen的默认资源路径嵌入了一些静态文件,这些文件的名称和编号因构建而异。有没有一种从Clojure获得嵌入式资源清单的习惯方法?我知道我可以使用clojure.java.io/resource
来访问一个已知的文件名,但我怎样才能得到一个文件列表?获取uberjar中嵌入资源的列表
我正在与leiningen和Clojure一起创建一个uberjar,因此我有一个部署文件。我还使用leiningen的默认资源路径嵌入了一些静态文件,这些文件的名称和编号因构建而异。有没有一种从Clojure获得嵌入式资源清单的习惯方法?我知道我可以使用clojure.java.io/resource
来访问一个已知的文件名,但我怎样才能得到一个文件列表?获取uberjar中嵌入资源的列表
以下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))
非常好,谢谢。我们最终完全抛弃了这个想法,并且做了一些没有嵌入资源的事情。也就是说,我事先进行了测试,结果非常完美。再次感谢。 – WesleyJohnson