【问题标题】:Get leiningen project root directory获取leiningen项目根目录
【发布时间】:2014-10-14 10:02:11
【问题描述】:

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

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

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

【问题讨论】:

  • 当您说“sqlite 文件”时,是数据文件还是包含源代码的文件?如果是数据文件,我的经验是大部分文件写入和文件读取功能都会默认使用Leiningen项目根目录。如果这不起作用,那么我会查看您用于访问文件的函数的文档。 (如果您从 Clojure 调用 Java 函数,那么 Java 函数希望在哪里找到文件?)如果您试图将 Clojure 源代码文件保存在 Leiningen 根目录中,一种选择是使用 load-file,虽然这不是一个好主意。
  • 我的意思是一个数据文件,我使用的函数对leiningen项目根目录不起作用。如果它起作用,那是另一个问题,一个函数怎么知道根目录在哪里?跨度>

标签: clojure leiningen


【解决方案1】:

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

(System/getProperty "user.dir")

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

在第二种方法中,您可以插入任何路径字符串而不是“.”,如果字符串不包含初始反斜杠,它将相对于 Clojure 的当前工作目录进行解释。 (我不确定在 Windows 系统上的行为是否完全相同。)

(第一种方法来自this question;那里的答案可能对您的情况有用。)

【讨论】:

    【解决方案2】:

    能否将 sqlite 文件放在资源文件夹中,然后可以在运行时使用clojure.java.io/resource 检索它?

    【讨论】:

    • 听起来不错,在一定程度上解决了我的问题。但是我什至想知道是否存在获取绝对根目录路径的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多