访问clojure webnoir项目中的资源文件

访问clojure webnoir项目中的资源文件,clojure,leiningen,noir,Clojure,Leiningen,Noir,我正在使用Leiningen进行一个小型Clojure项目,其目录结构如下: 计划 src 试验 xxx login.clj 资源 公开的 css bootstrap.css 在test目录中的login.clj文件中,我试图在respuces/publi/css目录中读取bootstrap.css文件: (def css-file "/css/bootstrap.css") (def css-contents (slurp css-file)) 返回文件未找到错误

我正在使用Leiningen进行一个小型Clojure项目,其目录结构如下:

  • 计划
    • src
    • 试验
      • xxx
        • login.clj
    • 资源
      • 公开的
        • css
          • bootstrap.css
在test目录中的login.clj文件中,我试图在respuces/publi/css目录中读取bootstrap.css文件:

(def css-file "/css/bootstrap.css")
(def css-contents (slurp css-file))
返回文件未找到错误:

线程“main”java.io.FileNotFoundException:/css/bootstrap.css(没有这样的文件或目录)中的异常,编译:(login.clj:10)


所以问题很简单,我应该怎么做才能访问文件?

检查运行时实际的类路径是什么。classspath很可能引用了./resources目录,而不是./resources/public目录


尝试使用“/public/css/bootstrap.css”来解决这个问题。

Slurp将从文件系统而不是类路径读取文件。因此,您试图在那里执行的操作是,您试图从文件系统的根目录中读取/css/bootstrap.css处的文件,但它不存在,正如错误消息所说的那样


如果您只是为了测试目的而读入它,那么您应该能够使用相对路径(如resources/public/css/bootstrap.css)将其读入,假设您正在项目目录下运行测试

你实际上需要使用“资源”——或者

  • (clojure.java.io/resource“relative/path”),它返回指向的URL 档案

  • (noir.io/get resource“relative/path”)返回 文件,或

  • (noir.io/slurp-resource“relative/path”)返回内容 文件的一部分


  • 别担心,你不是第一个被这个问题抓住的人

    我真的不知道如何检查类路径[这里有点麻烦]。虽然当我使用hiccup页面助手“include css”时,例如:
    (include css)/css/bootstrap.css”)
    它运行得很好[我的意思是生成的html页面具有css]