有没有一种编程方式可以将我的主目录名称插入到Leiningen的project.clj文件中的文件路径中?
我在不同的机器上运行Leiningen项目,在这些机器上我有不同的主目录。该项目使用未由Maven管理的jar文件;我下载它们并将它们放在相对于我的主目录的目录中,或者将它们复制到Leiningen项目中。第二个选项可行但不理想。
使用第一个选项(将jar文件保留在其他地方)的简单方法是在我的Leiningen目录中添加指向“其他地方”目录的符号链接。这行得通,但每台机器上的链接都必须不同,因此我不能将链接文件包含在git仓库中,而我宁愿将所有内容都包含在git仓库中。
难道没有一种方法可以在project.clj文件中使用环境变量或以其他方式引用我的主目录吗?我已经查看了示例项目文件,但迄今为止还没有找到解决方案。
然而,Leiningen一点也不喜欢这个:
将
我在不同的机器上运行Leiningen项目,在这些机器上我有不同的主目录。该项目使用未由Maven管理的jar文件;我下载它们并将它们放在相对于我的主目录的目录中,或者将它们复制到Leiningen项目中。第二个选项可行但不理想。
使用第一个选项(将jar文件保留在其他地方)的简单方法是在我的Leiningen目录中添加指向“其他地方”目录的符号链接。这行得通,但每台机器上的链接都必须不同,因此我不能将链接文件包含在git仓库中,而我宁愿将所有内容都包含在git仓库中。
难道没有一种方法可以在project.clj文件中使用环境变量或以其他方式引用我的主目录吗?我已经查看了示例项目文件,但迄今为止还没有找到解决方案。
我以为我可以在运行时构建路径字符串——毕竟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`。