gpt4 book ai didi

clojure - 如何在project.clj中引用环境变量或主目录

转载 作者:行者123 更新时间:2023-12-02 20:01:40 25 4
gpt4 key购买 nike

有没有办法以编程方式将我的主目录名称插入到 Leiningen 的 project.clj 中的文件路径中?

我在不同的机器上运行 Leiningen 项目,其中有不同的主目录。项目使用了非Maven管理的jar文件;我下载它们并将它们放在与我的主目录相关的目录中,或者将它们复制到 Leiningen 项目中。第二种选择可行,但不受欢迎。

使用第一个选项(将 jar 文件保存在其他地方)的一个简单方法是添加一个软链接(soft link)到我的 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")]

然而,莱宁根根本不喜欢这样:

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 中,以便从那里获取它。但你说这些 jars 不会由 Maven 管理,所以我们开始:

defproject 是一个宏,它允许使用取消引号来进行任意评估。它通过调用内部 fn unquote-project 来完成此操作。 。因此您可以执行以下操作:

:resource-paths [~(str (System/getenv "HOME") "/dist/mason/jar/mason.19.jar")]

关于clojure - 如何在project.clj中引用环境变量或主目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30985714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com