我使用leningen在我已经在src/some_project_name目录保存CLJ文件(旁边的自动生成core.clj文件)创建的项目。的Clojure - 啜文件相对于项目
还保存这些CLJ文件是我想从slurp
他们身边生活的CLJ文件中的文本文件。我的理解是,读取文件是相对于工作目录而言的,并且工作目录将会在您开始从哪里开始REPL。我从所有文件所在的src/some_project_name里面开始了REPL,而不是root。 (System/getProperty "user.dir")
确认这是活动目录。
但是我也读过slurp
会查找与你的根目录相关的文件,这显然是发生了什么,尽管从src/some_project_name中启动了REPL。为了找到它们,我必须列出相对于根目录的文本文件路径。 “src/some_project_name/foo.txt”而不仅仅是“foo.txt”。
之前设置项目,文件是相对于地方的REPL正在运行(如我所期望的)访问。现在建立一个项目后,它们似乎只能相对于root进行访问,而不管REPL的起始位置。
我有这个没有问题,但我不明白。是否有一些由leningen完成的设置可以拦截REPL评估并告诉它从根目录搜索而不是在活动目录的位置?
感谢您的答复 - 这重申我怀疑(REPL是相对于根),但不真的告诉我为什么如果你从根以外的地方开始它的原因。我很欣赏关于使用资源文件夹的提示 - 我很好奇,除常规之外,还有哪些优势?我试图扫描文档,但围绕资源/类路径相对路径的讨论有点稀缺。再次感谢。 – Solaxun
不确定您是在问这是如何实现的,或者为什么这样设计。如果前者,REPL获得他们自己的JVM进程,那么Leiningen只需要在正确的目录中启动这些JVM。有一个名称空间专门用于在leiningen-core子项目('leiningen.core.eval')中设置这些内容。如果是后者,我可能会推测这是为了确保您的Leiningen命令的效果是一致的,无论您的shell的当前工作目录有任何意外(只要它停留在项目中)。 –