Доступ к файлам ресурсов в проекте clojure webnoir

Я работаю над небольшим проектом Clojure, используя Leiningen со следующей структурой каталогов:

  • project
    • src
    • test
      • xxx
        • login.clj
    • resources
      • public
        • css
          • bootstrap.css

В файле login.clj в тестовом каталоге я пытаюсь проглотить файл bootstrap.css в каталоге respuces/publi/css:

(def css-file "/css/bootstrap.css")
(def css-contents (slurp css-file))

Который возвращает ошибку «файл не найден»:

Исключение в потоке "основной" java.io.FileNotFoundException: /css/bootstrap.css (нет такого файла или каталога), компиляция: (login.clj:10)

Итак, вопрос простой, что мне делать, чтобы получить доступ к файлу?


person r0hitsharma    schedule 01.07.2012    source источник


Ответы (3)


Slurp будет читать файл из файловой системы, а не из пути к классам. Итак, что вы пытаетесь там сделать, вы пытаетесь прочитать файл в /css/bootstrap.css из корня вашей файловой системы, и он не существует, как и говорится в сообщении об ошибке.

Если вы просто читаете его для целей тестирования, вы должны иметь возможность проглотить его с относительным путем, например resources/public/css/bootstrap.css, предполагая, что вы запускаете тесты из каталога проекта.

person mblinn    schedule 02.07.2012

Вам действительно нужно использовать «ресурсы» - либо

  1. (clojure.java.io/resource "relative/path"), который возвращает URL-адрес файла,

  2. (noir.io/get-resource"relative/path"), который возвращает файл, или

  3. (noir.io/slurp-resource "relative/path"), который возвращает содержимое файла.

И не волнуйтесь — вы не первый, кто столкнулся с этой проблемой!

person Simon Brooke    schedule 24.07.2014

Проверьте, каков ваш фактический путь к классам при запуске. Скорее всего, classspath ссылается на каталог ./resources, а не на каталог ./resources/public.

Попробуйте вместо этого использовать «/public/css/bootstrap.css», чтобы решить эту проблему.

person deterb    schedule 02.07.2012
comment
Я действительно не знаю, как проверить путь к классам [немного нуба здесь]. Хотя, когда я использую хелпер страницы икоты include-css, например: (include-css "/css/bootstrap.css"), он работает просто отлично [я имею в виду, что сгенерированная html-страница имеет css] - person r0hitsharma; 02.07.2012