2024 年 Clojure 状况调查! 分享您的想法。

欢迎!请参阅 关于 页面以了解更多关于如何使用本站的信息。

0
IO
编辑

可能是一个非常新手的问题,抱歉。

api/ 
 |-deps.edn
 |-src/
   |-api/
     |-core.clj
     |-resource_1.csv
library/
 |-deps.edn
 |-src/
   |-library/
     |-core.clj
     |-resource_2.csv

api 的 deps.edn 使用库作为本地依赖。它们都使用各自 csv 文件中的静态信息。

我的问题是,我如何在打包 api 之 universal jar 时正确包含静态文件,以及如何在代码中使用静态文件呢?

api 没有任何端点正在提供服务。它们在代码内部用于计算。

1 答案

+1

选中
 
最佳答案

你是打算从类路径加载数据库(csv)文件,还是从文件系统中读取文件?

如果资源存在,您不需要做任何事情 - 通过将它们包含在src目录中,它们就已经在类路径上了。然后您可以通过(clojure.java.io/resource "api/resource_1.csv")来访问它们(例如,在JDK中还有其他方法)。

如果是文件系统,您需要安排一些方式使其在最终部署中可用(在那个问题上这实际上并不是deps.edn或甚至是Clojure的问题)。

我希望将它们用作资源。读取内容并将其存储在一个常量中,用于计算。目前我有一个打开它们的辅助函数

(defn load-csv [filename]
  (with-open [reader (io/reader filename)]
    (doall
     (csv/read-csv reader))))

我想我知道需要将其更改为利用io/resource而不是reader?
您仍然需要一个reader,但我认为它与资源返回的URL一起工作

(defn load-csv [filename]
  (with-open [reader (io/reader (io/resource filename))]
    (doall
     (csv/read-csv reader))))
是的,这可行,非常感谢你,Alex!我实际上正期待你的书尽快寄来,所以我非常感动你帮助我这个新手!
...