加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 用于将资源从运行jar复制到外部的Idiomatic Clojure

发布时间:2020-12-15 00:40:28 所属栏目:Java 来源:网络整理
导读:这似乎是一个经典的问题,但我找不到任何关于它的“clojure方式”. 所以,我在资源/(leiningen项目)里面有一个foo /目录.当jar’d / uberjar’d时,这个foo /目录放在jar的根目录下.由于jar中的文件在运行时可能不是物理上一致的,因此您无法使用基本复制功能以
这似乎是一个经典的问题,但我找不到任何关于它的“clojure方式”.

所以,我在资源/(leiningen项目)里面有一个foo /目录.当jar’d / uberjar’d时,这个foo /目录放在jar的根目录下.由于jar中的文件在运行时可能不是物理上一致的,因此您无法使用基本复制功能以递归方式将目录复制到外部世界.

存在几种Java世界的解决方案(例如How to write a Java program which can extract a JAR file and store its data in specified directory (location)?和How to extract directory (and sub directories) from jar resource?),但我没有找到任何现有的Clojure解决方案.
作为初学者(包括Clojure和Java),我不确定如何将上述解决方案转换为Clojure.逐字逐句地从Java翻译成Clojurish Java Interop似乎并不正确.
是否有“官方”,clojure-idiomatic方式来做到这一点?

请注意,我正在使用Raynes的fs实用程序库.似乎没有直接执行此功能的功能,但也许我可以使用一些元素来简化流程? (除了明显的基本io糖)

解决方法

几个月前我写了 cpath-clj,它将通过URI列出类路径上的资源.然后,您可以尝试以下操作:
(require '[cpath-clj.core :as cp]
         '[clojure.java.io :as io])

(doseq [[path uris] (cp/resources (io/resource "foo"))
        :let [uri (first uris)
              relative-path (subs path 1)
              output-file (io/file output-directory relative-path)]]
  (with-open [in (io/input-stream uri)]
    (io/copy in output-file)))

由于图书馆没有记住这个用例,因此有一些杂耍:

>(cp / resources(io / resource“foo”))将为您提供foo目录的内容 – 如果您只使用了(cp / resources“foo”),则会找到类路径上的所有此类目录,
>理论上,类路径上可以有多个具有相同路径的文件,这就是函数返回多个uris的原因;在我们的例子中,只有第一个是感兴趣的.
> path始终以斜杠开头,因此要获得相对的路径,我们必须将其删除.

也许这对你有帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读