请在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文件作为类路径的资源加载,还是从文件系统加载文件?

如果资源已包含在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
您仍然需要一个读取器,但我认为它与从资源返回的URL配合使用

(defn load-csv [filename]
  (with-open [reader (io/reader (io/resource filename))]
    (doall
     (csv/read-csv reader))))
by
是的,这生效了,非常感谢Alex!我实际上正在等待你的书任何一天都可以到达,所以你对像我这样的初学者如此帮助我,我非常感动!
...