【问题标题】:error when accessing environment variables in leiningen project.clj with environ使用 environ 访问 leiningen project.clj 中的环境变量时出错
【发布时间】:2021-12-13 02:04:37
【问题描述】:

我正在尝试使用 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 就可以工作。

我做错了什么?

【问题讨论】:

    标签: clojure leiningen environ


    【解决方案1】:

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

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

    但是,由于目标是将 codox 参数移动到 git 可以忽略的单独文件中,因此正确的方法是将带有硬编码值的 :codox 部分放在 profiles.clj 的 dev 配置文件中. Codox 会调查个人资料以及项目。

    【讨论】:

      【解决方案2】:

      我经常使用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 一起使用吗? 如果您需要根据主机将生成的网页部署到不同的位置,我只需使用(使用scp 而不是cp 更容易)创建一个简短的shell 脚本并放入一些if 测试以确定目的地.

      【讨论】:

      • 你说得对,我不需要environ。但请参阅下面的答案以了解正确的方法。
      猜你喜欢
      • 2014-02-26
      • 2014-06-22
      • 2019-07-10
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 2020-01-17
      • 2011-04-03
      • 1970-01-01
      相关资源
      最近更新 更多