2024 Clojure状态调查!分享您的想法。

欢迎!有关此如何工作的更多信息,请参阅关于页面。

0
tools.deps
增强描述

将主要选项添加到{{-Sdescribe}}输出。这可以通过添加一个新的{{:main-opts}}键及其字符串值来实现,该值表示主选项缓存文件的内容(如果存在)或空字符串。

理由

下游执行环境可以在使用{{clojure}}进行依赖下载、类路径构造以及通过别名选择主选项时使用主选项信息。另一种看法是,与{{-Spath}}为将{{clojure}}与可以消费类路径的其他可执行环境组合提供有用信息类似,访问主选项在组合时也有类似的价值。这可能并不足以证明要有一个新的{{-Smain-opts}}标志来污染选项列表;将其放入{{-Sdescribe}}输出可能是足够的。

另一个可能的理由是,这可能有助人类进行调试。

实施考虑

这可能是脚本中的一行新代码,可能放在{{-Sdescribe}}输出中emit {{:main-aliases}}的下一行。

:main-opts "$(cat "$main_file")"

这适用于大多数正常情况,但可能取决于TDEPS-56的情况,那里可能会针对含有空格的主选项进行一些平台特定的更改来正确处理此情况。(或许鉴于这一点,{{clojure}}可以采取立场,{{:main-opts}}不保证最终是固定的;这对于仍然处于alpha阶段的事物是一致的,并且也与{{-Sdescribe}}不是一个正式API的事实相一致。)

3 个答案

0
_由:mfikes_发表的评论

使用

{code:title=deps.edn}
{:aliases {:foo {:main-opts ["-m" "foo.core" 1 2 3]}}}


所附补丁导致{{clojure -Sdescribe -A:foo}}输出为


{:version "1.9.0.358"
 :config-files ["/usr/local/lib/clojure/deps.edn" "/home/ubuntu/.clojure/deps.edn" "deps.edn" ]
 :install-dir "/usr/local/lib/clojure"
 :config-dir "/home/ubuntu/.clojure"
 :cache-dir ".cpcache"
 :force false
 :repro false
 :main-opts "-m foo.core 1 2 3"
 :resolve-aliases ""
 :classpath-aliases ""
 :jvm-aliases ""
 :main-aliases ""
 :all-aliases ":foo"}


在 macOS 和 Ubuntu 16.04 上。并且执行 {{clojure -Sdescribe}} 输出


{:version "1.9.0.358"
 :config-files ["/usr/local/lib/clojure/deps.edn" "/home/ubuntu/.clojure/deps.edn" "deps.edn" ]
 :install-dir "/usr/local/lib/clojure"
 :config-dir "/home/ubuntu/.clojure"
 :cache-dir ".cpcache"
 :force false
 :repro false
 :main-opts ""
 :resolve-aliases ""
 :classpath-aliases ""
 :jvm-aliases ""
 :main-aliases ""
 :all-aliases ""}


该补丁将错误重定向到 {{/dev/null}} 来处理上述第二种情况,即主缓存文件不存在。
0

评论者:alexmiller

实际上有两个主要选项的来源需要考虑:1) .main 文件,其中包含主 opts 别名的结果,2) 命令行中指定的任何附加选项。似乎这些应该组合成一个统一的 主选项集,或者应该作为单独的键包含。我的第一直觉会是前者,但还需要再思考一下。

建议的方法也没有将数据 "clojure-ify",而是仅仅将整个内容当作一个字符串处理。我们已经有一些关于转义的问题,我希望能以最正确的方式解决这个问题,可能是在 .main 文件中其他必要的关于加强引号变更的背景下。

0
参考: https://clojure.atlassian.net/browse/TDEPS-72 (由 mfikes 报告)
...