如何在 project.clj 中引用环境变量或主目录
How to reference environmental variable or home dir in project.clj
有没有办法以编程方式将我的主目录名称插入 Leiningen project.clj 的文件路径中?
我 运行 在不同的机器上有一个 Leiningen 项目,我在这些机器上有不同的主目录。项目使用非Maven管理的jar文件;我下载它们并将它们放在与我的主目录相关的目录中,或者将它们复制到 Leiningen 项目中。第二个选项有效但不受欢迎。
使用第一个选项(将 jar 文件保存在其他地方)的一种简单方法是将软件 link 添加到我的 Leiningen 目录中的 "somewhere else" 目录。这行得通,但是 link 在每台机器上必须不同,所以我不能将 link 文件包含在 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")]
然而,莱宁根一点也不喜欢这样:
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”。
以 repeatability 的名义,您最好将 jar 安装在本地 maven 存储库中,并将其添加到 project.clj :dependencies
以便从那里获取。但是你说那些 jar 不会被 maven 管理,所以我们开始吧:
defproject
是一个宏,它允许使用取消引用来进行任意评估。它通过调用内部 fn unquote-project 来完成。所以你可以这样做:
:resource-paths [~(str (System/getenv "HOME") "/dist/mason/jar/mason.19.jar")]
有没有办法以编程方式将我的主目录名称插入 Leiningen project.clj 的文件路径中?
我 运行 在不同的机器上有一个 Leiningen 项目,我在这些机器上有不同的主目录。项目使用非Maven管理的jar文件;我下载它们并将它们放在与我的主目录相关的目录中,或者将它们复制到 Leiningen 项目中。第二个选项有效但不受欢迎。
使用第一个选项(将 jar 文件保存在其他地方)的一种简单方法是将软件 link 添加到我的 Leiningen 目录中的 "somewhere else" 目录。这行得通,但是 link 在每台机器上必须不同,所以我不能将 link 文件包含在 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")]
然而,莱宁根一点也不喜欢这样:
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”。
以 repeatability 的名义,您最好将 jar 安装在本地 maven 存储库中,并将其添加到 project.clj :dependencies
以便从那里获取。但是你说那些 jar 不会被 maven 管理,所以我们开始吧:
defproject
是一个宏,它允许使用取消引用来进行任意评估。它通过调用内部 fn unquote-project 来完成。所以你可以这样做:
:resource-paths [~(str (System/getenv "HOME") "/dist/mason/jar/mason.19.jar")]