clojure - хлебать файлы относительно проекта

У меня есть проект, созданный с использованием leningen, в котором я сохранил файлы clj в каталоге src/some_project_name (рядом с автоматически сгенерированным файлом core.clj).

Также с этими clj файлами сохраняются текстовые файлы, которые я хочу slurp из файлов clj они живут рядом. Насколько я понимаю, что чтение файлов относится к рабочему каталогу, и что рабочий каталог будет там, где вы начали REPL. Я запустил REPL изнутри src/some_project_name, где расположены все файлы, а не root. (System/getProperty "user.dir") подтверждает, что это активный каталог.

Однако я также читал, что slurp будет искать файлы относительно вашего корневого каталога, что, очевидно, и происходит, несмотря на то, что REPL запускается из src/some_project_name. Я должен перечислить пути текстовых файлов относительно корневого каталога, чтобы их можно было найти, например, "src/some_project_name / foo.txt", а не просто "foo.txt".

Перед настройкой проекта файлы были доступны относительно того места, где выполнялся REPL (как я и ожидал). Теперь после настройки проекта они кажутся доступными только относительно root, независимо от того, где запущен REPL.

У меня нет проблем с этим, но я этого не понимаю. Есть ли какая-то настройка, выполненная leningen, которая перехватывает оценку REPL и говорит ему искать от корня, а не от того, где находится активный каталог?

1 ответ

Решение

Я считаю, что репозитории Leiningen используют корневой каталог проекта в качестве рабочего каталога. (Если не батут, они используют подпроцесс с ожидаемым рабочим каталогом - попробуйте jps -l после lein repl, вы должны увидеть два clojure.main процессы.)

На отдельном примечании, вы можете использовать clojure.java.io/resource загружать файлы, используя относительные пути к классам. Такие файлы обычно помещаются в resources Папка - с Leiningen, это обычно будет родным src,

Например, если вы разместите foo.txt в resources/some_project_name, вы должны быть в состоянии сделать следующее:

(require '[clojure.java.io :as io])

(slurp (io/resource "some_project_name/foo.txt"))
Другие вопросы по тегам