【发布时间】:2015-06-22 16:59:53
【问题描述】:
有没有办法以编程方式将我的主目录的名称插入到 Leiningen 的 project.clj 中的文件路径中?
我在不同的机器上运行一个 Leiningen 项目,在那里我有不同的主目录。项目使用了非Maven管理的jar文件;我下载它们并将它们放在与我的主目录相关的目录中,或者将它们复制到 Leiningen 项目中。第二个选项有效,但不可取。
使用第一个选项(将 jar 文件保存在其他位置)的一种简单方法是在我的 Leiningen 目录中添加指向“其他位置”目录的软链接。这行得通,但是每台机器上的链接必须不同,所以我不能将链接文件包含在 git 存储库中,我宁愿将所有内容都包含在 git 存储库中。
难道没有办法在我的 project.clj 文件中使用环境变量或以其他方式引用我的主目录吗?到目前为止,我已经通过sample project file 并没有找到解决方案。
我以为我可以在运行时构造路径字符串——毕竟 project.clj 中的内容只是 Clojure 代码。由于将我的主目录硬编码到 project.clj 中没有任何问题:
:resource-paths [/Users/myhomedir/dist/mason/jar/mason.19.jar")]
我想我可以这样做:
:resource-paths [(str (System/getenv "HOME") "/dist/mason/jar/mason.19.jar")]
但是,Leiningen 根本不喜欢这样:
java.lang.IllegalArgumentException: No implementation of method: :as-file of protocol: #'clojure.java.io/Coercions found for class: clojure.lang.PersistentList
将 [...] 更改为 (vector ...) 会出现同样的错误,但最后会出现“clojure.lang.Symbol”。
【问题讨论】: