使用environ访问leiningen project.clj中的环境变量时出错



我正在尝试使用environ1.2.0为project.clj.中的codox创建环境变量,但失败了

我有个人资料。clj
{:dev {:env {:doc-dir "/home/me/some/dir"}}}

到目前为止一切都很好:.line-env已经正确创建,我可以在repl中提取值。然而,我无法获得项目内部的值.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 

如果我删除对environment.core.的调用,codox就会工作

我做错了什么?

我通过查看codox的来源发现了这个问题。

当插件提取项目的地图时,它读取而不进行解释,因此输出路径没有设置为环境值,而是设置为形式(environ.core/env :doc-dir)

然而,由于目标是将codox参数移动到git可以忽略的单独文件中,因此正确的方法只是将:codox部分和硬编码的值放在profiles.clj中的dev概要文件中。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上由于模块/反射错误而失败。

你真的需要environcodox一起使用吗?如果您需要根据主机将生成的网页部署到不同的位置,我只需要使用创建一个简短的shell脚本(使用scp而不是cp更容易),并进行一些if测试来确定目的地。

相关内容

  • 没有找到相关文章

最新更新