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 uberjar时正确地包含静态文件,我如何在使用代码中正确使用这些静态文件?

api没有提供用于服务静态文件的端点。它们在代码中用于计算。

1 个答案

+1

选择
 
最佳答案

你是打算从类路径中以资源形式加载csv文件,还是从文件系统中加载文件?

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

如果是在文件系统中,您需要以某种方式安排它们在最终部署中可用(这其实不是一个deps.edn或者Clojure的问题)。

by
我想将它们用作资源。读取内容并将其存储在常数中,以便在计算中使用。目前我有一个辅助函数可以打开这些文件

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

我想我需要将其更改为先使用io/resource而不是reader?
by
您仍然需要一个reader,但我认为它使用resource返回的URL可以工作

(defn load-csv [filename]
  (with-open [reader (io/reader (io/resource filename))]
    (doall
     (csv/read-csv reader))))
by
是的,这个方法有效,非常感谢Alex!我实际上正在等待您的书随时可以送达,所以我非常感动,你像帮助一个新手一样帮助我!
...