Clojure 如何在project.clj中引用环境变量或home dir
有没有办法通过编程将我的主目录的名称插入到Leiningen的project.clj中的文件路径中 我在不同的机器上运行一个Leiningen项目,在那里我有不同的主目录。该项目使用的jar文件不是由Maven管理的;我下载它们并将它们放在一个与我的主目录相对的目录中,或者将它们复制到Leiningen项目中。第二种选择可行,但并不可取 使用第一个选项(将jar文件保存在其他地方)的一种简单方法是在我的Leiningen目录中添加到“其他地方”目录的软链接。这是可行的,但是每台机器上的链接必须不同,所以我不能将链接文件包含在git存储库中,我更愿意将所有内容都包含在git repo中 在我的project.clj文件中,是否有使用环境变量或以其他方式引用我的主目录的方法?到目前为止,我已经仔细研究了这个问题,还没有找到解决办法 我想我可以在运行时构造路径字符串——毕竟,project.clj中的只是Clojure代码。由于将我的主目录硬编码到project.clj中不会出现任何问题:Clojure 如何在project.clj中引用环境变量或home dir,clojure,leiningen,Clojure,Leiningen,有没有办法通过编程将我的主目录的名称插入到Leiningen的project.clj中的文件路径中 我在不同的机器上运行一个Leiningen项目,在那里我有不同的主目录。该项目使用的jar文件不是由Maven管理的;我下载它们并将它们放在一个与我的主目录相对的目录中,或者将它们复制到Leiningen项目中。第二种选择可行,但并不可取 使用第一个选项(将jar文件保存在其他地方)的一种简单方法是在我的Leiningen目录中添加到“其他地方”目录的软链接。这是可行的,但是每台机器上的链接必须不
:resource-paths [/Users/myhomedir/dist/mason/jar/mason.19.jar")]
我想我可以做到:
:resource-paths [(str (System/getenv "HOME") "/dist/mason/jar/mason.19.jar")]
然而,莱宁根一点也不喜欢这样:
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”。以您的名义,最好将jar安装在本地maven存储库中,并将其添加到项目中。clj:dependencies
,以便从那里获取它。但你说过那些罐子不会由maven管理,所以我们来:
defproject
是一个宏,它允许使用取消引用进行任意计算。它通过调用内部fn来实现。因此,您可以执行以下操作:
:resource-paths [~(str (System/getenv "HOME") "/dist/mason/jar/mason.19.jar")]
谢谢你的链接。我会考虑为未来的图书馆朝那个方向迈进。目前,
unquote项目
解决方案非常有用,因此我非常感谢。