我有一个使用leinigen创建的项目,其中我在src/some_project_name目录中保存了clj文件(与自动生成的core.clj文件并排)。
这些clj文件还保存了我想要从它们旁边的clj文件中 slurp
的文本文件。我的理解是读取文件是相对于工作目录的,并且工作目录将是您从哪里启动REPL。我从所有文件都位于其中的src/some_project_name中启动了REPL,而不是根目录。 (System/getProperty "user.dir")
确认这是活动目录。
但是我也读过,slurp
会查找相对于根目录的文件,这显然是发生的事情,尽管从src/some_project_name内部启动了REPL。为了找到它们,我必须列出相对于根目录的文本文件路径,例如“src/some_project_name/foo.txt”,而不仅仅是“foo.txt”。
设置项目之前,文件可以相对于REPL正在运行的位置访问(正如我所期望的那样)。现在设置项目后,它们似乎只能相对于根目录访问,无论REPL从哪里启动。
我对此没有问题,但我不明白它。是leningen做了一些设置来拦截REPL评估,并告诉它从根目录而不是活动目录搜索吗?
leiningen.core.eval
)中有一个专门用于设置这些内容的命名空间。如果是后者,我可能会推测这是为了确保您的Leiningen命令的效果始终保持一致,而不受您的shell当前工作目录的任何意外影响(只要它保持在项目内)。 - Michał Marczyk