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

欢迎!有关本站的工作方式,请参阅关于页面。

0
tools.deps
增强描述

将主要选项添加到 {{-Sdescribe}} 输出。这可以是一个新的 {{:main-opts}} 键,以及一个表示主选项缓存文件内容的字符串值(如果存在),否则为空字符串。

理由

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

另一个次要的理由可能是,这可能会对人类的调试目的有用。

实施注意事项

这可能是脚本中的一条新的单行,可能放置在 {{-Sdescribe}} 输出中的 {{: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) 存储主 opts 别名的 .main 文件;2) 命令行中指定的任何附加选项。看起来这些应该合并成一个统一的选项集,或者作为单独的键包含。我的第一直觉是前者,但需要再思考一下。

建议的方法也不对数据进行 "clojure-ify",而是将整个内容当作字符串处理。我们已经遇到了转义等问题,并且我想以最正确的方式解决这些问题,可能是在 .main 文件中的引号更改之后。

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