使用 environ 在 leiningen project.clj 中访问环境变量时出错
error when accessing environment variables in leiningen project.clj with environ
我正在尝试使用 environ 1.2.0 在 project.clj 中为 codox 创建环境变量,但失败了。
我在profiles.clj
{:dev {:env {:doc-dir "/home/me/some/dir"}}}
到目前为止一切正常:.line-env
已正确创建,我可以在 repl 中提取值。
但是我无法获得 project.clj
中的值
(defproject ....
:codox {:output-path (environ.core/env :doc-dir) })
我从 lein codox
收到一个错误:
Syntax error (IllegalArgumentException) compiling at (/tmp/form-init13693313479173922228.clj:1:74).
No implementation of method: :as-file of protocol: #'clojure.java.io/Coercions found for class: clojure.lang.PersistentList
如果我删除对 environ.core.
的调用,codox 就会工作
我做错了什么?
我经常使用codox
,但通常只接受默认输出目录。我尝试了如下实验:
; Using `lein-ancient check :all` checks plugins
:plugins [
[lein-codox "0.10.7"]
[com.jakemccrary/lein-test-refresh "0.24.1"]]
:codox {:src-dir-uri "http://github.com/cloojure/tupelo/blob/master/"
:src-linenum-anchor-prefix "L"
:source-paths ["src/clj" "src/cljc"]
:language :clojure
:namespaces [#"^tupelo\."]
:exclude-vars #".*IntervalClosed|.*SpliceItem|map->[A-Z].*"
:output-path "docs/out/codox" }
请注意,这适用于 Java11 (OpenJDK11),但在 Java17 上失败并出现 module/reflection 错误。
您真的需要 environ
才能与 codox
一起使用吗?
如果您需要根据主机将生成的网页部署到不同的位置,我会创建一个简短的 shell 脚本(使用 scp
而不是 cp
更容易)并放入一些if
测试以确定目的地。
我通过查看codox的来源解决了问题。
插件拉项目图时,读取不解释,
因此输出路径未设置为环境值,而是设置为 (environ.core/env :doc-dir)
形式
然而,由于目标是将 codox 参数移动到 git 可以忽略的单独文件中,正确的方法是将带有硬编码值的 :codox 部分放在profiles.clj
中的开发配置文件。 Codox 会调查概况和项目。
我正在尝试使用 environ 1.2.0 在 project.clj 中为 codox 创建环境变量,但失败了。
我在profiles.clj
{:dev {:env {:doc-dir "/home/me/some/dir"}}}
到目前为止一切正常:.line-env
已正确创建,我可以在 repl 中提取值。
但是我无法获得 project.clj
(defproject ....
:codox {:output-path (environ.core/env :doc-dir) })
我从 lein codox
收到一个错误:
Syntax error (IllegalArgumentException) compiling at (/tmp/form-init13693313479173922228.clj:1:74).
No implementation of method: :as-file of protocol: #'clojure.java.io/Coercions found for class: clojure.lang.PersistentList
如果我删除对 environ.core.
的调用,codox 就会工作我做错了什么?
我经常使用codox
,但通常只接受默认输出目录。我尝试了如下实验:
; Using `lein-ancient check :all` checks plugins
:plugins [
[lein-codox "0.10.7"]
[com.jakemccrary/lein-test-refresh "0.24.1"]]
:codox {:src-dir-uri "http://github.com/cloojure/tupelo/blob/master/"
:src-linenum-anchor-prefix "L"
:source-paths ["src/clj" "src/cljc"]
:language :clojure
:namespaces [#"^tupelo\."]
:exclude-vars #".*IntervalClosed|.*SpliceItem|map->[A-Z].*"
:output-path "docs/out/codox" }
请注意,这适用于 Java11 (OpenJDK11),但在 Java17 上失败并出现 module/reflection 错误。
您真的需要 environ
才能与 codox
一起使用吗?
如果您需要根据主机将生成的网页部署到不同的位置,我会创建一个简短的 shell 脚本(使用 scp
而不是 cp
更容易)并放入一些if
测试以确定目的地。
我通过查看codox的来源解决了问题。
插件拉项目图时,读取不解释,
因此输出路径未设置为环境值,而是设置为 (environ.core/env :doc-dir)
然而,由于目标是将 codox 参数移动到 git 可以忽略的单独文件中,正确的方法是将带有硬编码值的 :codox 部分放在profiles.clj
中的开发配置文件。 Codox 会调查概况和项目。