【问题标题】:Get list of embedded resources in uberjar获取uberjar中的嵌入资源列表
【发布时间】:2014-03-12 20:25:16
【问题描述】:

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

【问题讨论】:

    标签: clojure leiningen


    【解决方案1】:

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

    【讨论】:

    • 太好了,谢谢。我们最终完全放弃了这个想法,并在没有嵌入资源的情况下做了一些事情。也就是说,我事先对此进行了测试,并且效果很好。再次感谢。
    猜你喜欢
    • 2011-09-21
    • 2018-03-11
    • 2017-11-18
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多