首页 > 解决方案 > 是否可以在 deps.edn 中设置 `*warn-on-reflection*?

问题描述

使用leiningen,可以在配置文件 [1] 中重新配置全局变量。*warn-on-reflection*仅在测试等特殊阶段启用诸如整个模块之类的选项很方便。寻找与 Clojure CLI 相同的方法,我找不到明确的方法。查看各种命令,例如编译需要以下内容的 clojure 代码,clojure -M -e "(compile 'some.namespace)"我可能不得不求助于类似的技巧。

作为记录,[2]等各种来源建议将其放在每个文件中,但这很麻烦。

[1] https://github.com/technomancy/leiningen/blob/6c8cdeebb07972f2a24b95bfc64b339c9895d3bc/sample.project.clj#L285-L290
[2] https://github.com/clj-easy/graal-docs#reflection

标签: clojure

解决方案


在稍后找到这个其他 SO [1] 之后,似乎这样做的方法如下:

; deps.edn
{:aliases {:my-profile {:main-opts ["-e" "(set! *warn-on-reflection* true)"]}}}

-e command如本测试所示,它被其他人正确接收:

clojure -Mmy-profile -e '(println "warn-on-reflection =" *warn-on-reflection*)'
; => warn-on-reflection = true

评论中报告的一个缺点是只能:main-opts应用来自不同别名的一个选项 - 最后一个获胜。
对未来有一个希望:ask.clojure.org [2] 上的一个问题要求 JVM 选项。

我希望这将帮助其他像我一样努力进行转换的人。

[1]如何在 deps.edn 中设置 *print-length* 的默认值
[2] https://ask.clojure.org/index.php/3787/theres-enable-warn-reflection-from-command-running -clojure


推荐阅读