请在2024年Clojure状态调查!分享您的想法。

欢迎!有关如何使用本站的信息,请参阅关于页面。

0
IO
编辑

可能是一个非常新手的问题,为此我道歉。我有一个如下结构的monorepo:

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文件作为classpath的资源加载,还是从文件系统中的文件加载?

如果资源存在,您不需要做任何其他事情——通过将它们包含在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,但我认为它与从resource获得的URL一起使用是可行的

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