获取Leiningen项目根目录

7

如何在运行时获取Leiningen项目的根目录?

我的问题是我想把我的SQLite文件放在根目录,并通过不同的源文件在源代码中访问它。

我不喜欢使用相对路径,该怎么做?


当你说“sqlite文件”时,它是一个数据文件还是包含源代码的文件?如果它是一个数据文件,我的经验是大多数文件写入和文件读取函数默认使用Leiningen项目根目录。如果这不起作用,那么我会查看您正在使用以访问文件的函数的文档。(如果您从Clojure调用Java函数,那么Java函数希望在哪里找到文件?)如果您尝试将Clojure源代码文件保留在Leiningen根目录中,则一种选择是使用load-file,尽管这不被认为是一个好主意。 - Mars
我的意思是一个数据文件,而我使用的函数在leiningen项目根目录上不起作用。如果它能够工作,那就是另外一个问题了,一个函数怎么知道根目录在哪里? - user2925565
2个回答

8

以下是获取当前工作目录完整路径的两种方法,当您使用lein repllein run启动Clojure时,这将是项目的主目录:

(System/getProperty "user.dir")

并且

(.getCanonicalPath (clojure.java.io/file "."))

在第二种方法中,您可以插入任何路径字符串而不是“.”,如果该字符串不包含初始反斜杠,则会相对于Clojure的当前工作目录进行解释。(我不确定在Windows系统上行为是否完全相同。)
(第一种方法来自这个问题;那里的答案可能对您的情况有用。)

0

你可以把 SQLite 文件放在资源文件夹中,然后在运行时使用 clojure.java.io/resource 来检索它吗?


1
听起来是个好主意,而且在一定程度上解决了我的问题。然而,我甚至想知道是否存在一种获取绝对根目录路径的方式。 - user2925565

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接